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.
This server does not currently have a deployable release on Glama. Follow the repository's setup instructions to install and configure it for your MCP client, including any required credentials and local dependencies.
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
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
Related MCP Connectors
Planity MCP server for ChatGPT, Claude and any AI agent: list appointments, add appointment, move appointment, delete appointment, block staff time, list no-shows, get booking statistics and search clients in your own Planity account. Cotlet works in the account through your Cloud Browser, a real Chrome where you sign in to Planity yourself; Cotlet does not store your password and you need no Planity API key. About the official Planity API: Planity has no public API, no developer docs and no official MCP server (checked 23 Oct 2026). Its own ways to get data out are manual: statistics can be exported or printed from Admin > Statistiques RDV, and an appointment export that Planity support switches on by email on request. Setup and FAQ: https://cotlet.dev/integrations/planity-api-mcp-server
Skedda MCP server for ChatGPT, Claude and any AI agent: list bookings, create booking, cancel booking, approve booking request and block out a space in your own Skedda account. Cotlet works in the account through your Cloud Browser, a real Chrome where you sign in to Skedda yourself; Cotlet does not store your password and you need no Skedda API key. About the official Skedda API: Skedda has a read-only API in beta and no official MCP server (checked 31 Oct 2026). It lists spaces and booking occurrences and sends webhooks for booking events, on Skedda Premier and AllBooked Advanced. Setup and FAQ: https://cotlet.dev/integrations/skedda-api-mcp-server
SignUpGenius MCP server for ChatGPT, Claude and any AI agent: create sign-up, add slots, list participants, swap participant and message group in your own SignUpGenius account. Cotlet works in the account through your Cloud Browser, a real Chrome where you sign in to SignUpGenius yourself; Cotlet does not store your password and you need no SignUpGenius API key. About the official SignUpGenius API: SignUpGenius has an official API only for paid Premium (Pro) subscribers, and it almost only reads: your sign-ups, report data and group members, plus adding a member to a group (checked 11 Oct 2026). It cannot create or edit sign-ups, change slots, move participants or send messages. Setup and FAQ: https://cotlet.dev/integrations/signupgenius-api-mcp-server
Let AI agents use any website you're logged in to. Sessions stay encrypted on your machine.
Related MCP Servers
- FlicenseNot gradedqualityBmaintenanceConnects AI agents to the École Directe API to access grades, homework, timetables, school life, messages, and documents.-
- AlicenseAqualityBmaintenanceEnables 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.211MIT
- AlicenseNot gradedqualityBmaintenanceEnables an AI agent to access a Moodle Campus Virtual account with the user's own credentials, reading course content, files, forums, notices, calendar, grades and quiz attempts for every enrolled course. Teachers, managers and course creators also get access to other participants' data and to planned, verified write operations such as forums, grading, attendance, quizzes, groups, content and H5P activities.4Apache 2.0