FDDB-Exporter

MCP · Spring Boot · MongoDB · InfluxDB Actively maintained

fddb.info has a good food database and a diary that is genuinely quick to log into. It also deletes older entries after a while and keeps every graph behind the premium tier. FDDB-Exporter takes your own diary out of it and puts it somewhere you control — a database, a REST API and a web UI — so the data outlives the service and you can ask it questions it was never going to answer.

What it does

  • Exports diary entries from fddb.info on a schedule or on demand, and stores both the individual products and the daily totals.
  • Persists to MongoDB for the entries and InfluxDB for the daily summaries, which is the shape Grafana wants.
  • Ships a web UI that is mobile-friendly and installable as a PWA, so it is usable from a phone without a separate app.
  • Exposes a REST API with Swagger docs, including product search and filtering by day of the week, plus a correlation endpoint for hunting down food intolerances.
  • Runs an optional, read-only-by-default MCP server, so an AI assistant can answer questions about the diary in plain language.
  • Runs as a Docker container on Java 21, and checks for its own updates.

What I built, and when

It started in March 2021 as a Python script. All it did was scrape the daily calorie total out of fddb.info and write it into a Postgres table, because I wanted the number on a Grafana panel and the free tier would not give me one. That version is archived now; it did its job for about six months.

By August 2021 I cared more about macronutrients than calories, which meant the scraping had to understand a whole diary entry instead of one figure at the bottom of the page. Then in February 2023 I wrote a Flutter app on top of the backend, so triggering an export did not mean opening a terminal.

The real change came in October 2024. I rewrote the thing properly: Java and Spring Boot instead of a script, MongoDB instead of a single table, full entry retrieval instead of aggregates, user login, and a REST API rather than whatever the last integration happened to need. Everything since has been built on that — the InfluxDB path for Grafana, the correlation endpoint, and in September 2025 a re-release of the Flutter app against the new API. Then came the redesign: a web UI that took over from the Flutter app as the way most people use the diary, and an MCP server so an assistant can answer questions about it in plain language.

It is still the tool I use every day, and it is still under active development. Each step above has a post; they are listed at the bottom of this page, oldest problem first if you read them upwards.

Where it lives

← All projects