{
  "markdown": "# schoolpass-mcp\n\nMCP server for **SchoolPass** — read AND change your child's school arrival &\ndismissal from a parent account. Talks to the SchoolPass REST API used by the\nSchoolPass web and mobile apps, authenticating server-side with your own parent\nemail and password (no browser, no extension).\n\n> Developed and maintained by AI (Claude Code). Use at your own discretion.\n\nParent-scoped: read tools plus a confirm-gated dismissal-change write/cancel.\n\n## Tools\n\n| Tool | What it does |\n|------|--------------|\n| `schoolpass_healthcheck` | Reachability + authentication, reported separately. |\n| `schoolpass_whoami` | The parent identity the server signed in as. |\n| `schoolpass_list_students` | Your linked students — name, grade, home dismissal location, aftercare. |\n| `schoolpass_get_profile` | The parent account profile. |\n| `schoolpass_list_drivers` | Authorized pickup drivers, with their carpools. |\n| `schoolpass_get_calendar` | A student's arrival/dismissal calendar over a date range. |\n| `schoolpass_list_pickup_changes` | Pickup/dismissal changes for a student on a date. |\n| `schoolpass_list_dismissal_locations` | The school's dismissal locations, with ids. |\n| `schoolpass_get_school_info` | Basic school info and per-school config. |\n| `schoolpass_submit_dismissal_change` | Submit a dismissal/arrival change (confirm-gated, dry-run preview). |\n| `schoolpass_cancel_dismissal_change` | Cancel a change, back to default (confirm-gated). |\n\n## Configuration\n\n| Env var | Required | Notes |\n|---------|----------|-------|\n| `SCHOOLPASS_EMAIL` | yes | Your SchoolPass parent account email. |\n| `SCHOOLPASS_PASSWORD` | yes | Your SchoolPass password. |\n| `SCHOOLPASS_SCHOOL_CODE` | yes | The numeric school id (the `AppCode` / `appCode` value; e.g. `1183`). |\n| `SCHOOLPASS_API_HOST` | no | Regional API host override (default `busapi-east16-ss.school-pass.net`). |\n\n**Finding your school id and region host:** sign into your school's\n`<school>.school-pass.net` portal, open the new SchoolPass app, and read\n`appCode` (the id) and `apiUrl` (the host) from its browser `localStorage`.\n\n## Install\n\n```json\n{\n  \"mcpServers\": {\n    \"schoolpass\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"schoolpass-mcp\"],\n      \"env\": {\n        \"SCHOOLPASS_EMAIL\": \"you@example.com\",\n        \"SCHOOLPASS_PASSWORD\": \"your-password\",\n        \"SCHOOLPASS_SCHOOL_CODE\": \"1183\"\n      }\n    }\n  }\n}\n```\n\n## Notes\n\n- **Parent scope only.** A parent token cannot reach admin routes (visitor\n  management, carline operations, reports, bus routing); those return `403`.\n- **Never retry a rejected login.** SchoolPass fronts its login with reCAPTCHA;\n  repeated failures can get the account challenged.\n- **No credentials, still boots.** The server starts without configuration and\n  answers `tools/list`; the config error surfaces on the first tool call.\n\n## Without the server: `curl`\n\nThe SchoolPass API is reachable server-side, so a one-off shell read needs no\nMCP process — see the bundled **`schoolpass-curl`** skill\n(`skills/schoolpass-curl/`) for a `curl` + `jq` recipe set.\n\n## Development\n\n```bash\nnpm install\nnpm test            # tsc typecheck + unit + boot tests\nnpm run build       # tsc + esbuild bundle\nnode --env-file=.env scripts/live-check.mjs   # live read-only check (needs .env)\n```\n\n## License\n\nMIT\n",
  "bytes": 3317,
  "sha": "a8ad59227072b68adff168cbc2c6e0c065087da305247ae93c2bd17f550e24d2",
  "repo_slug": "chrischall/schoolpass-mcp",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_chrischall_schoolpass_mcp_0199c146/readme"
}