Crossing EcoleDirecte and FFE: only suggesting tournaments that fit school

chess-tournament-finder finds FFE-certified chess tournaments near me.
What it doesn't say is whether the tournament it found actually fits my
kids' schedule. A tournament on a Sunday, no problem. A tournament
spanning several days that spills into the school week depends entirely on
whether we're in term time or on holiday, and no skill was checking that.
The concrete problem#
While listing tournaments in the Hauts-de-Seine department to prepare this article, an example fell right into my lap: the "23e Bois-Colombes Chess Master" is announced with a single date, December 26, 2026. Nothing in that date says the tournament actually runs for five days, Saturday through Wednesday. As it happens, December 26 falls during the Christmas break, so there's no conflict. But nothing in the listing guaranteed that up front, and another tournament straddling term time would have had to be excluded for the exact same reason.
Two MCP servers already exist on my machine to answer pieces of this
question: ffe-mcp for tournaments, ecoledirecte-mcp for my kids'
homework and absences. Built at different times, for different needs,
never designed to talk to each other. chess-tournament-fit is the agent
that makes them talk.
What lister_tournois doesn't say#
The first instinct would be to assume a tournament date is enough to know
if it's compatible. Wrong: the lister_tournois tool in ffe-mcp returns
a single date per tournament, the start date. For the Bois-Colombes Chess
Master, that date is December 26. The actual duration, "FROM SATURDAY 26
TO WEDNESDAY 30 DECEMBER 2026", only exists in the free-text announcement
field of details_tournoi, a block of text written for a player reading
the announcement, not for a program parsing it.
The round count doesn't help guess the duration either: this tournament has 9 rounds spread over 5 days, two rounds a day except the last one. Another 9-round tournament could just as easily be played over a single weekend at 4-5 rounds a day. Without reading the announcement, there's no way to tell. So the agent looks for an explicit date range or a round-by-round schedule in that text, and marks the tournament "duration unconfirmed" instead of guessing from the round count alone when that information is missing.
No hardcoded school calendar#
Same rule as domain-expiry-check, which queries the Vercel API on every
run instead of maintaining a domain list that would go stale: school
holidays are fetched fresh from the French Ministry of Education's site on
every run, never hardcoded into the agent. They change every year, and a
wrong date costs more than a missing one.
Only the February and spring holidays vary by zone (my kids are in zone C). Christmas, All Saints' and summer are the same everywhere in France, but the agent still looks up the exact dates every time: "the same every year" is only true in principle, not on the exact boundaries.
A single-day tournament on a Saturday or Sunday is compatible by default, term time or holiday alike: no school on weekends. A tournament that spills into a weekday is only compatible if every one of its dates falls within a confirmed holiday period. Otherwise it's excluded, with the reason spelled out: "overlaps school days".
Two indirect signals, not a full calendar#
ecoledirecte-mcp exposes no timetable or calendar tool. What I have
available is consulter_devoirs and consulter_absences. That doesn't say
"the child is free that day", but it gives two useful signals:
- Homework or a test due on the school day right after the tournament ends adds a "to check" flag, without excluding the tournament: it's my call whether that's a problem, not the agent's to decide for me.
- An absence already recorded on the tournament's dates adds a "conflict" flag: a possible sign of a trip or something else already planned.
That's the honest limit of this agent, and I'd rather state it plainly than let it look like a full calendar check: it flags what these two tools make visible, not what isn't there.
What this generalizes to#
Two thirds of this agent already existed, each on its own, before the idea
of crossing them ever came up. ffe-mcp looked for tournaments,
ecoledirecte-mcp read homework. Neither was built to answer the question
the other could shed light on.
The general lesson isn't "build more tools", it's that two narrow, well-built tools, made for completely independent reasons, are often worth more combined after the fact than any single tool designed from day one to do everything. The price to pay is staying honest about what the crossing actually reveals, and what it merely assumes.


