@pipeworx/openfoodtox
Connect: https://gateway.pipeworx.io/openfoodtox/mcp · Install: one-click buttons
Tools: 2
EFSA’s derived toxicological reference values for chemicals in food and feed — acceptable daily intakes, acute reference doses, tolerable intakes and operator exposure levels — with the assessment body and critical endpoint behind each one.
3,437 substances, 8,620 reference values.
Source
OpenFoodTox 3.0, Zenodo record 19388272
(DOI 10.5281/zenodo.19388272), published 2026-04-30, CC-BY-4.0.
Extracted from EFSA’s official .xlsx export — nothing is scraped. The data
ships inside the pack rather than being fetched per call, so answers do not
depend on Zenodo being reachable. Every response carries the DOI, publication
date and licence.
Tools
1. Hazard profile. “What is the ADI for glyphosate?” →
openfoodtox_hazard_profile({substance: "glyphosate"}) → every reference value
EFSA has derived, each with its unit, assessment body and critical endpoint.
2. Find the substance. “Which aflatoxins has EFSA assessed?” →
openfoodtox_search({query: "aflatoxin"}) → matching substances and how many
reference values each carries.
Two things that shape the output
One substance can have several legitimate values. Cadmium carries a tolerable weekly intake of 2.5 µg/kg bw from EFSA and 7 from the older JECFA assessment. Both are real. The pack lists them with their assessment bodies rather than reconciling them — picking one would invent a consensus that does not exist.
Absence is not zero. A substance with no derived reference value returns
found:false with an explicit statement that this is not a finding of safety.
An empty list here would read as “no limit applies” to a chemical in food.
Refreshing
Re-run the extractor against a newer Zenodo record and re-run the tests. The tests assert specific published values (glyphosate ADI 0.5 mg/kg bw/day, aspartame 40, cadmium TWI 2.5) precisely so a refresh that breaks the join fails loudly instead of quietly changing numbers.
Column layout worth knowing if you touch the extractor: reference-value columns
are IUCLID dotted paths with a nested element between the metric and the field
(HumanHealthHazardCharacteristics.AcceptableDailyIntake.Adi.lowerValue), and
that element differs per metric. Match on the tail of the path, not the composed
name — matching the composed name parses every row, joins every key, and yields
an empty dataset.
Tools
- openfoodtox_hazard_profile — Get EFSA’s derived toxicological reference values for a chemical substance in food or feed — acceptable daily intake (ADI), acute reference dose (ARfD), tolerable intakes, and operator exposure levels
- openfoodtox_search — Search EFSA OpenFoodTox for assessed substances by name fragment, returning each match with how many reference values it carries. Use to find the exact substance name before requesting a hazard profil
Tools
-
openfoodtox_hazard_profile— Get EFSA's derived toxicological reference values for a chemical substance in food or feed — acceptable daily intake (ADI), acute reference dose (ARfD), tolerable intakes, and operator exposure levels -
openfoodtox_search— Search EFSA OpenFoodTox for assessed substances by name fragment, returning each match with how many reference values it carries. Use to find the exact substance name before requesting a hazard profil