gradebook-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@gradebook-mcpwhat assignments are missing for Emma this week?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
gradebook-mcp
ParentVUE shows grades one student, term, and course at a time. That makes a simple question—“What schoolwork needs attention?”—surprisingly hard to answer, especially for families with more than one child.
gradebook-mcp solves that problem by syncing ParentVUE into a local,
read-only SQLite snapshot. You can access it through either interface—or both:
a phone-friendly dashboard for reading grades, assignments, and consolidated missing work; and
an optional MCP server so AI assistants can answer questions about the same data.
Despite the package name, MCP is not required. The dashboard runs on its own without an MCP endpoint or MCP authentication.
It never writes to ParentVUE. Data stays on your machine, and automatic sync is off until you explicitly enable it.
Quick start
Requirements: Docker with Compose and a ParentVUE parent account.
Choose the interfaces you want to run:
Dashboard only: set
UI_PORTand leavePORTblank. No MCP setup or authentication is needed.MCP only: set
PORTand configure one MCP authentication mode.Both: set both ports and configure MCP authentication.
cp .env.example .envTo run both interfaces, generate a token with openssl rand -hex 32, then edit
.env and set:
GRADEBOOK_PARENTVUE_HOST=<district>.edupoint.com
GRADEBOOK_PARENTVUE_USER=you@example.com
GRADEBOOK_PARENTVUE_PASS=...
# Protect the MCP endpoint with one of the auth modes below.
MCP_BEARER_TOKEN=<random token>
# Enable the dashboard.
UI_PORT=3001Start the service:
docker compose up -d --build
curl http://127.0.0.1:3000/healthzMCP endpoint:
http://127.0.0.1:3000/mcpDashboard:
http://127.0.0.1:3001/gradebook
Run the first sync with the dashboard's Sync now button or the
gradebook_sync MCP tool.
Dashboard only
If you do not need MCP, leave PORT and all MCP authentication settings blank,
set UI_PORT=3001, and run (requires Compose v2.24 or newer):
docker compose -f compose.yaml -f compose.dashboard-only.yaml up -d --buildThe dashboard is unauthenticated. Keep it on a trusted LAN, VPN, or private overlay network such as Tailscale; never expose it to the public Internet.
Related MCP server: canvas-scholar-mcp
Optional MCP tools
The MCP server exposes eight tools:
Tool | What it answers |
| What is missing, incomplete, or late across courses and students? |
| What are each student's current grades and missing-work counts? |
| What courses and grades does a student have for a term? |
| What assignments and statuses are recorded for a course? |
| How has a course grade changed over time? |
| What school years and reporting periods are available? |
| Can you refresh the local snapshot now? |
| Is syncing configured and healthy, and how much data is stored? |
Start with gradebook_missing for action items or gradebook_overview to find
student (stu_...) and course (crs_...) IDs. All tools read the local
snapshot except gradebook_sync, which logs in to ParentVUE and refreshes it.
The dashboard provides the same practical views: student and term selection, course grades and assignments, consolidated missing work, sync status, and a manual sync button.
Configuration
Settings come from environment variables; a local .env file is loaded when
present. See .env.example for descriptions and examples.
Listeners and storage
Variable | Default | Purpose |
| blank | MCP port; blank disables MCP ( |
|
| Host address where Compose publishes MCP. |
| blank | Dashboard port; blank disables the dashboard. |
|
| Host address where Compose publishes the dashboard. |
|
| SQLite directory ( |
|
| Timezone used to select the current reporting period. |
|
| Pino log level. |
At least one of PORT or UI_PORT must be set.
ParentVUE and sync
Variable | Default | Purpose |
| — | District host without a scheme. |
| — | ParentVUE username. |
| — | ParentVUE password. |
| all | Optional comma-separated student-name allowlist. |
|
| Enables automatic sync. |
|
| Time between automatic syncs; |
Without all three ParentVUE credentials, the service still starts but cannot sync. Manual syncs are always available when credentials are configured.
Before enabling automatic sync, check your district's terms: some districts prohibit automated logins. When enabled, the first sync runs 2–7 minutes after startup and later runs use the configured interval. Only one sync can run at a time.
Authentication and network safety
Authentication protects the MCP endpoint only. When MCP is enabled, configure exactly one mode:
Bearer token: set
MCP_BEARER_TOKENto a random value of at least 16 characters. Clients sendAuthorization: Bearer <token>.Cloudflare Access: set
ACCESS_TEAM_DOMAIN,ACCESS_AUD, and at least one identity inALLOWED_EMAILSorALLOWED_SERVICE_TOKENS. The server verifies the Access JWT and its allowlist.
The two listeners have different trust boundaries:
MCP is authenticated. For remote access, place it behind TLS using an identity-aware proxy, a private overlay such as Tailscale or WireGuard, or a TLS reverse proxy such as Caddy or nginx. Never send a bearer token over plain HTTP on a public network.
The dashboard is not authenticated. Anyone who can reach it can read all stored grades and trigger a ParentVUE login. Restrict it to a trusted private network and never route a public hostname or tunnel to it.
Compose publishes both ports on loopback by default. Change the corresponding
*_BIND_ADDR only when the selected interface is private or another layer
provides the required protection.
Data behavior
Syncs merge ParentVUE data into gradebook.sqlite. They do not write back to
the district. Assignments that disappear upstream are marked stale instead of
deleted, and course-grade changes are retained as history.
Every MCP call is audit-logged with the resolved identity, tool, arguments, duration, and outcome. Sync runs also record their trigger and result. The dashboard limits new sync attempts to one per minute to reduce the risk of a ParentVUE account lockout.
Backup and restore
The database uses SQLite WAL mode, so do not back up only the .sqlite file
while the service is running. Use the included consistent-backup script:
BACKUP_DIR=/path/to/backups KEEP_DAYS=14 scripts/backup.shIt creates and verifies a snapshot through the running container and removes
successful backups older than KEEP_DAYS. CONTAINER defaults to
gradebook-mcp; BACKUP_DIR defaults to ./backups.
To restore, stop the service and replace the database plus its WAL files in the named volume:
docker compose down
docker run --rm --user 1000:1000 \
-v gradebook_gradebook-data:/data \
-v "$PWD/backups:/backup:ro" \
alpine sh -c "rm -f /data/gradebook.sqlite /data/gradebook.sqlite-wal /data/gradebook.sqlite-shm && cp /backup/gradebook-<timestamp>.sqlite /data/gradebook.sqlite"
docker compose up -dAdjust the volume prefix if your checkout directory or COMPOSE_PROJECT_NAME
differs. Do not run docker compose down -v unless you intend to delete all
stored data.
Local development
Requires Node.js 22.16 or newer and pnpm 12.3.4.
npx pnpm@12.3.4 install
cp .env.example .env
pnpm devFor dashboard-only development, set:
PORT=
UI_PORT=3001
UI_HOST=127.0.0.1For local MCP development without authentication, set:
NODE_ENV=development
HOST=127.0.0.1
DEV_INSECURE_NO_AUTH=trueThe bypass works only outside production on a loopback address.
pnpm build
pnpm testThe ParentVUE client is a zero-dependency package in
src/lib/parentvue with its own documentation and tests.
License
MIT — see LICENSE.
This server cannot be deployed
Maintenance
Related MCP Connectors
- HAVNOAuthapp.havnre
Read-only AI access to HAVN properties, leads, tasks, files, media, and analytics.
Safe, read-only Postgres and MySQL access for AI agents. Audit log + column-level controls.
Query 40 databases from Claude, ChatGPT, or Cursor — on any device. Read-only, encrypted, audited.
Open, inspect, filter, edit and convert xlsx and csv files from your AI chat. Processing is local.
Related MCP Servers
- FlicenseAqualityDmaintenanceEnables natural language queries about grades, GPA, attendance, and schedules by connecting Claude to StudentVue school dashboards. Includes analytical tools for grade simulation, what-if scenarios, and academic performance tracking based on live school data.19-
- AlicenseAqualityAmaintenanceEnables students to ask an AI assistant about their Canvas LMS data, including assignments, grades, missing submissions, discussions, and upcoming items, while keeping access read-only and private.43MIT
- AlicenseAqualityBmaintenanceEnables AI assistants to read a student's own Blackboard (Ultra) data—courses, assignments, grades, announcements, and attachments—through their existing logged-in browser session, read-only and locally.9431 npm4MIT
- FlicenseBqualityBmaintenanceEnables local, read-only access to IE Blackboard, IE Connects, and IE Careers within AI assistants, with 49 tools for deadlines, readings, events, grades, internships, and more.49-