@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

Regenerated from source · build September 10, 2026