The data
The data/ folder is a snapshot I took on 30 October 2026 from FotMob, ESPN and Turkish match reports: the fixture and the referee (match.json), both squads with each player's availability for Sunday and last-ten-match stats (squad.json, opponent.json), every match with goals, cards and xG (results.json), and the league table and next fixtures.
There are real stories in there. Trabzonspor won all four home matches in the sample, 13–0 on aggregate. Gaziantep concede late: a third of their goals against came after the 75th minute. Gaziantep's most-used player is suspended. Salah has 8 goals and 5 assists in ten matches, and Franculino, the second-best scorer, is doubtful. On Thursday, four days after this match, Trabzonspor play Freiburg in Europe.
Two rules shape every tool. First, null means "not shown on the source", never zero. There's no xG for Gaziantep's cup game, and a model handed None may read it as zero, so every tool says "not available" instead (a test checks that no None leaks out). Second, tools return small, computed answers, not raw files. Paste results.json (126 KB) into a prompt and the model gets most of it right. "Most" is the problem. So, as the header of matchday/tools.py puts it: LLMs interpret, tools count.