Skip to main content
Glama
README.md
# edookit-legacy-mcp

MCP server for the Edookit **parent/student portal** (`*.edookit.net`). Scrapes the portal web UI because the Edookit REST API is only available when separately enabled by the school.

## 21 tools

| Tool | Description |
|---|---|
| `portal_dashboard` | Main dashboard — student name, pinned items, week's attendance, timetable highlights |
| `portal_inbox` | List inbox items; filter: all / unread / messages / events |
| `portal_evaluations` | Grades by subject, by date, or trends |
| `portal_assignments` | Homework — upcoming, today, recent, archive |
| `portal_exams` | Written tests and oral exams — upcoming or archive |
| `portal_materials` | Teaching/learning materials; optional course filter |
| `portal_lesson_plans` | Lesson plan / curriculum content per week |
| `portal_timetable` | Student timetable — current week, static, upcoming events, archive. Use `offset` (multiples of 7) to navigate weeks: `7` = next week, `-7` = last week, `14` = two weeks ahead, etc. Use `term` to select a school year (e.g. `2026/27`). |
| `portal_terms` | List available school terms/years |
| `portal_attendance` | Attendance records and stats (retroactive excuse, forward report, stats, overview) |
| `portal_excuse_absence` | Submit a retroactive absence excuse for specific dates |
| `portal_report_absence` | Report a future absence by day or by lesson |
| `portal_messages` | List inbox / sent / archive messages |
| `portal_get_message` | Full content of a single message by ID |
| `portal_send_message` | Compose and send a new message |
| `portal_payments` | Payment history and outstanding balances |
| `portal_discussions` | Parent-teacher discussion slots — upcoming or archive |
| `portal_courses` | Enrolled courses, class groups, course enrolments |
| `portal_portfolios` | Student portfolio work items |
| `portal_library` | Borrowed and available library books |
| `portal_consents` | Consent forms and their status |
| `portal_search` | Full-text search across the portal |

## Setup

### 1. Install via npx (no build needed)

```json
{
  "mcpServers": {
    "edookit-portal": {
      "command": "npx",
      "args": ["github:thewulf7/edookit-legacy-mcp"],
      "env": {
        "EDOOKIT_SCHOOL": "your-school",
        "EDOOKIT_USERNAME": "your@email.com",
        "EDOOKIT_PASSWORD": "yourpassword"
      }
    }
  }
}
```

### 2. Build from source (optional)

```bash
git clone https://github.com/thewulf7/edookit-legacy-mcp
cd edookit-legacy-mcp
npm install
npx playwright install chromium
npm run build
node dist/index.js
```

### 3. Environment variables

| Variable | Required | Description |
|---|---|---|
| `EDOOKIT_SCHOOL` | yes | Subdomain — if your portal is `https://zs-example.edookit.net`, use `zs-example` |
| `EDOOKIT_USERNAME` | no | Plus4U login (email). If omitted, a visible browser window opens for interactive login. |
| `EDOOKIT_PASSWORD` | no | Plus4U password. Required together with `EDOOKIT_USERNAME` for headless mode. |

### 4. Authentication

**Headless (recommended):** provide `EDOOKIT_USERNAME` + `EDOOKIT_PASSWORD`. The server logs in via Playwright, saves the Plus4U OIDC session to `~/.cache/edookit-legacy-mcp/profile-<school>/session-storage.json`, and uses a fast silent re-auth on subsequent starts — no browser window, no manual steps.

**Interactive:** omit credentials. On the first tool call a visible Chrome window opens at the portal login page. Complete the Plus4U / Google login manually. Once authenticated the window closes and the session is cached. This only works on a machine with a display.

To force a full re-login, delete `~/.cache/edookit-legacy-mcp/profile-<school>/`.

## Notes

- **Read-only by default** — only `portal_excuse_absence`, `portal_report_absence`, and `portal_send_message` submit data.
- All text is in Czech (the portal language); field values are returned as-is.
- Pages with no data return empty arrays — this is normal for accounts with no activity yet.
- `portal_search` depends on whether the school has search enabled in their Edookit instance.
- `portal_timetable` with `offset` fires a server-side session filter via AJAX before fetching the page, so the offset persists for the duration of the MCP process session.

TDQS

B3.4/5.0

Scored across 21 tools

Disambiguation4/5

Most tools map cleanly to distinct portal sections, but portal_inbox and portal_messages both expose message-like items and could cause selection confusion. The attendance views also overlap conceptually with the separate absence reporting/excuse tools, though descriptions make the read vs. submit distinction clear.

Naming Consistency4/5

Tool names consistently use a portal_ prefix and snake_case, and most retrieval tools follow a portal_<resource> pattern. Minor deviations such as portal_get_message, portal_send_message, and portal_report_absence break the otherwise uniform noun pattern.

Tool Count3/5

21 tools is on the heavy side, though each maps to a real feature area of a student portal. Some redundancy between inbox/messages and attendance/absence tools means the set could likely be consolidated without losing capability.

Completeness4/5

The toolkit covers the main read surfaces of a school portal: assignments, exams, timetable, attendance, payments, library, consents, and more. Missing write actions such as submitting consents or booking discussions are minor gap relative to the portal's apparent read-heavy purpose.

Maintenance

ActivityMaintained
ResponsivenessNo issues