This skill should be used when the user asks about their child's school arrival/dismissal through a SchoolPass parent account. Triggers on phrases like "check SchoolPass", "when is my kid dismissed", "what's my dismissal default", "list my students in SchoolPass", "who are my pickup drivers", "any pickup changes today", "school dismissal locations", or any request to read a SchoolPass parent account.
Documents
schoolpass-curl
Try itRead a SchoolPass parent account directly with curl against the regional SchoolPass REST API (a busapi shard on school-pass.net), without running the MCP server. Use for a one-off shell read of your students, arrival/dismissal calendar, pending pickup changes, drivers, dismissal locations, or school info — "check SchoolPass from the terminal", "list my kids in SchoolPass", "any dismissal changes today". Requires SCHOOLPASS_EMAIL / SCHOOLPASS_PASSWORD / SCHOOLPASS_SCHOOL_CODE.
What it does
Read a SchoolPass parent account directly with curl against the regional SchoolPass REST API (a busapi shard on school-pass.net), without running the MCP server. Use for a one-off shell read of your students, arrival/dismissal calendar, pending pickup changes, drivers, dismissal locations, or school info — "check SchoolPass from the terminal", "list my kids in SchoolPass", "any dismissal changes today". Requires SCHOOLPASS_EMAIL / SCHOOLPASS_PASSWORD / SCHOOLPASS_SCHOOL_CODE.
The skill document
SchoolPass API via curl
The SchoolPass JSON API is reachable server-side — no browser, no bridge, no
extension. This skill talks to it directly with curl.
Prefer the schoolpass-mcp server for anything conversational or repeated; use
this for one-off shell work, scripts, or when the server isn't running.
Ready-to-run request bodies and jq recipes: references/requests.md.
Full shape reference: ../../docs/SCHOOLPASS-API.md.
Setup
export SCHOOLPASS_EMAIL='you@example.com'
export SCHOOLPASS_PASSWORD='…'
export SCHOOLPASS_SCHOOL_CODE=1183 # your school id (the AppCode)
export SCHOOLPASS_API_HOST=busapi-east16-ss.school-pass.net # your region's shard
Find your school id and region host by signing into your school's
.school-pass.net portal, opening the new SchoolPass app, and reading
appCode (the id) and apiUrl (the host) from its localStorage.
Two rules
- Every request needs an
AppCode:header. It selects your school. Omit it (or send the wrong one) and you get401. It is not a secret.references/requests.md'ssp_curlhelper adds it for you. - HTTP status codes are real.
401= the token or AppCode was rejected,403= a parent account cannot reach that route (it is admin-only),2xx= success. Branch on the HTTP code.
Auth: email/password → bearer
POST Auth/userswith{schoolCode,email,password,authType:"Credentials"}→ the identities your email owns. Take the one whoseuserTypeis3(Parent).POST Auth/tokenwith{schoolCode,userId,userType,password,authType:"Credentials"}→{ access_token, refresh_token, … }. Sendaccess_tokenasAuthorization: Bearer …on every subsequent call.
references/requests.md's sp_login does both and caches the token.
Never retry a rejected login. SchoolPass fronts its login with reCAPTCHA; repeated wrong passwords can get the account challenged and break shell login. Fix the credential and try once.
Reads
All are GET with the AppCode header + Authorization: Bearer. Most parent
endpoints take an optional memberId (your own parent id, from Auth/users).
| Want | Endpoint |
|---|---|
| your students | GET parent/getstudents |
| parent profile | GET parent/profile |
| authorized drivers | GET parent/parentdrivers?includeCarpool=true |
| student calendar | GET Student/StudentCalendar?schoolCode=&studentId=&startDate=&endDate= |
| pickup changes | GET PickupChange/GetChanges?studentId=&date= |
| dismissal locations | GET dismissal/getDismissalLocations |
| school info | GET SchoolInfo/GetBasicSchoolInfo?schoolCode= |
| reachability (no auth) | GET version?schoolCode= |
Scope
Parent tokens are parent-scoped: the admin surface (visitor management, carline
operations, reports, bus routing) returns 403. This is expected, not a bug.
Never echo the password or the bearer token into a shared transcript.
Related skills
Read and change your children's school dismissal plans on PickUp Patrol (app.pickuppatrol.net) from a shell with curl — students, weekly defaults, day-by-day changes, school cutoff times.
Access AlphaPortal (AlphaRoute) school-bus data — students, stops, live bus GPS location, arrival notifications — from a shell with curl instead of running the alphaportal-mcp server. Capture the signed-in web app's refresh token ONCE (a paste-in-console one-liner, or the fpx browser bridge), then mint access tokens and curl the REST API directly. Use when you want AlphaPortal data without the MCP, in a script, or on a machine where the MCP isn't installed.
Query Korean school information, meals, and timetables from the official NEIS OpenAPI. Use when the user asks for school lunch menus, school timetables, or s...
Query an Infinite Campus (Campus Parent portal) district directly with curl instead of running the infinitecampus-mcp server — log in with a real username/password, capture the session cookie + XSRF token, and curl grades, attendance, assignments, schedule, messages, documents, and fees. Use when you want IC data without the MCP, in a script, or on a machine where the MCP isn't installed. Infinite Campus is per-district: the base URL and district app name are configurable, not hardcoded.
Read and manage a My Hot Lunchbox school-lunch account from a shell with curl — sign in, list students, read the lunch calendar and cart, check orders, deliveries and payments. Use when you want My Hot Lunchbox data without running the MCP server, in a script, or on a machine where the MCP is not installed.