epitech-planning
Provides optional Apple Calendar integration on macOS: checks the user's Apple Calendar for conflicts before registering, copies chosen activities with room and reminders into the calendar, and adds personal events using local EventKit.
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., "@epitech-planningcheck my planning for this week and show what I can still register for"
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.
epiplan
Your my.epitech.eu planning, as tools an AI agent can use. Check what's open, get a clear report, register to activities and modules — with you in the loop.
What it does
Reads your planning, modules, seats and slots
Tells you what's open, closing soon, or already booked
Registers you to events, slots and modules after you confirm
Logs in through your Microsoft account, no password stored
Runs on demand, nothing stays running in the background
What it never does
Register without a dry run and your approval
Show other students' names
Unregister you unless you name the exact event
Touch exams, or overlap your schedule, unless you say so
Go past its write budget or module allowlist
AI agent ──MCP──▶ server.py ─▶ tools.py ─▶ client.py ─▶ my.epitech.eu/api
(you ask) │ │ │
│ guardrails + └─ silent Microsoft SSO
│ audit log when tokens expire
└─ stdio (on demand) or HTTPUnofficial project. It talks to the same private API as the website, with your own account. Automating registrations may be restricted by your school's rules: check them first, and use it at your own risk.
Install
Needs Python 3.10+ and an MCP-capable agent. The installer registers itself automatically with the claude and codex CLIs when they are available; otherwise it prints what to add by hand.
git clone https://github.com/daniilsys/epiplan.git
cd epiplan
./install.sh
epiplan login # once: log in with Microsoft in the window that opens (MFA works)Then edit ~/.config/epiplan/rules.md with your preferences, restart your agent, and ask it to check your planning (the installed skill is called planning).
Step | Result |
virtualenv |
|
command |
|
config |
|
skill |
|
MCP server |
|
Nothing is installed system-wide. Remove the symlinks, the MCP entry and the folder to uninstall.
Related MCP server: campus-edu-mcp
Use it
Ask in plain words: "check my planning", "what can I register to this week?", "book me the review". A typical run:
It reads your rules and the next 14 days.
You get a short report: already booked, open and matching your rules, to decide, to watch.
It asks which items you want, with choices for slots.
For each one: a dry run first (checks module, window, seats, slot, overlaps), then the real call, which your agent asks you to approve.
A recap of what was done and what was refused.
CLI for quick checks:
epiplan whoami
epiplan list --days 7 --open-only
epiplan serve --http 8765 # run the MCP server by handTools
Dates are Europe/Paris; a bare date means that day at midnight. There is deliberately no module-unregistration tool.
Safety
The guardrails live in tools.py, not in a prompt, so a confused agent can't talk its way around them.
Guardrail | Detail |
Dry run by default | Write tools do nothing unless called with |
Kill switch | Real writes are refused unless |
Write budget |
|
Module allowlist |
|
Pre-checks | module registered, window open, not full, not past, slot free, no overlap, exams refused (unless |
Audit log | every attempt, with a mandatory |
Read-only mode |
|
Your agent's own permission prompt on each real write is the last line of defence. Don't set "always allow" on the write tools.
Variable | Default | Purpose |
| unset | Must be |
|
| Real writes per process |
| empty | Unit codes |
|
| Internal access/refresh tokens |
|
| Saved Microsoft browser session |
|
| Audit log |
tokens.json and session.json are mode 0600 and as sensitive as your login: never commit or share them.
How login works
The site signs you in with Microsoft Entra ID. Its internal refresh token only survives a few days of inactivity (measured: dead after about 67 hours), so pasting a token isn't reliable. epiplan uses your Microsoft session instead, which lasts much longer.
epiplan loginopens a browser once. You sign in normally; the state is saved tosession.json.When the API refresh fails,
client.pyruns a headless browser with that state, clicks the Office 365 button, lets Microsoft's silent SSO do its job, captures the new tokens and saves them back, along with the renewed cookies.If the Microsoft session itself has expired, you get a clear error: run
epiplan loginagain.
Fallback chain: access token → POST /auth/refresh → silent SSO → stop with an error. No retry loops.
Run it on a server
session.json is the only state to move.
# on your machine
epiplan login
scp ~/.config/epiplan/session.json server:/srv/epiplan/data/
# on the server
docker build -t epiplan .
docker run -d --name epiplan -v /srv/epiplan/data:/data -p 127.0.0.1:8765:8765 \
-e EPIPLAN_ENABLE_WRITES=1 epiplanKeep
/dataon a persistent, writable volume: the session is rewritten after each login.Never use the same
session.jsonon two machines at once (cookie and token rotation).The HTTP endpoint has no authentication: keep it on localhost or a private network, or put an authenticating proxy in front.
Not known yet: how long a Microsoft session lives for your tenant, and whether a new IP or country triggers MFA again. If so,
refreshfails with a clear message: log in locally and copy the file again.
Add-ons
Optional features that live on their own branch, so main stays small.
Add-on | Branch | What it does |
Apple Calendar (macOS) | Checks your Apple Calendar for conflicts before registering, copies chosen activities (with room and reminders) into it, and adds personal events. Local EventKit only, nothing leaves your Mac. Built by @matheoStattner. |
To use one, install from its branch instead of main:
git clone -b addon/apple-calendar https://github.com/daniilsys/epiplan.git
cd epiplan && ./install.sh
epiplan calendar connectOr, from an existing clone: git fetch origin && git switch addon/apple-calendar, then restart your agent. Setup details are in docs/APPLE_CALENDAR.md on that branch.
Repository
Path | Role |
| MCP server (stdio / HTTP), error mapping |
| The tools and their guardrails |
| HTTP client: bearer auth, locked refresh rotation, SSO fallback |
| Microsoft login with Playwright ( |
| Small CLI ( |
| The |
| Agent skill: report, questions, confirmations |
| Reverse-engineering notes: endpoints, data model, business rules |
| Local install, server image |
Status
Read tools tested against the live API; the MCP server tested end to end over stdio; dry-run guardrails verified.
Event registration and unregistration (no slots) tested by hand and reverted.
Not tested live: module registration, slot registration against the API's own refusals (full event, overlap), deployment from another IP.
API notes and open questions are in docs/API.md. Issues and pull requests welcome.
License
This server cannot be deployed
Maintenance
Related MCP Connectors
Governed memory and workspace for any AI: tasks, calendar, mail and pages, with per-action consent.
AI agents for CRM, mail, calendar, ERP and accounting - you approve. EU-hosted, OAuth.
Your planner in every AI chat: tasks, calendar, docs, habits, goals and memory, over MCP.
Logs your AI agent into websites, catches verification codes, and asks you before anything risky.
Related MCP Servers
- FlicenseNot gradedqualityBmaintenanceConnects AI agents to the École Directe API to access grades, homework, timetables, school life, messages, and documents.-
- AlicenseAqualityAmaintenanceEnables AI assistants to read a student's own university academic data — class timetables, exam schedules, grades, available terms, and empty classrooms — from Qiangzhi (jsxsd) or Zhengfang V9 systems via a session imported from the browser. All access is strictly read-only, never performing course selection, withdrawal, or evaluations.61MIT
- AlicenseBqualityCmaintenanceConnects AI assistants to the UNED virtual campus (agora.uned.es, Moodle) so students can log in via SSO, sync course materials, and search or read extracted text with page-level citations. It also surfaces deadlines, announcements, grades, classes and calendar events, tracks topic-by-topic progress, generates weekly study plans and exports dates to an .ics calendar.21MIT
- AlicenseBqualityAmaintenanceEnables AI assistants like Claude and ChatGPT to read and write in a French school's ENT ONE/Edifice workspace — messaging teachers, signing the liaison book, checking and ticking homework, reading school news, blogs, calendar and documents. It uses the parent's usual ENT credentials, converts HTML to plain text, and stores nothing on disk.481Apache 2.0