FoodChecker

Is this food healthy? A 0-100 score from nutrition, additives and processing (Open Food Facts).

Should I use this

Quality & Safety

A
Description quality
90%
Schema completeness
92%
Naming quality
95%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~1,175Tokens (tool definitions)
~2.1 KBTypical response size
Moderate attention impact (0.92% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "foodchecker": {
      "url": "https://foodchecker-ebon.vercel.app/mcp"
    }
  }
}

Remote endpoints

https://foodchecker-ebon.vercel.app/mcpstreamable-http

What it can do

Tool inventory

Tools (4)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟢check_food(barcode, query, country)

Looks up a packaged food or drink in Open Food Facts (3M+ products) by barcode or by name and returns a 0-100 health score (Excellent / Good / Poor / Bad) with the reasons: nutrition (Nutri-Score), additives and their risk level, and how processed it is. For questions such as whether a product is healthy. A barcode gives the most precise match.

Input Schema

{
  "type": "object",
  "properties": {
    "barcode": {
      "description": "EAN/UPC barcode digits, e.g. 3017620422003.",
      "type": "string"
    },
    "query": {
      "description": "Product name, ideally with the brand, e.g. 'Nutella hazelnut spread'. Used when there is no barcode.",
      "type": "string"
    },
    "country": {
      "description": "Optional country to prefer when searching by name, e.g. 'united-states', 'france', 'united-kingdom'.",
      "type": "string"
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢analyze_label(product_name, brand, ingredients_text, nutrition, is_drink, ...)

Scores a food from its label: the ingredient list and/or the nutrition facts, for example from a photo of the packaging or pasted text, including products that aren't in the database. Most accurate with the ingredient list exactly as printed, including E-numbers and words in brackets. Nutrition values can be per 100 g or per serving (with the serving size). Returns the same 0-100 score and reports any missing data.

Input Schema

{
  "type": "object",
  "properties": {
    "product_name": {
      "type": "string"
    },
    "brand": {
      "type": "string"
    },
    "ingredients_text": {
      "description": "The full ingredient list exactly as printed.",
      "type": "string"
    },
    "nutrition": {
      "type": "object",
      "properties": {
        "basis": {
          "type": "string",
          "enum": [
            "per_100g",
            "per_serving"
          ],
          "description": "What the numbers refer to. EU labels are usually per 100 g/ml; US Nutrition Facts are per serving."
        },
        "serving_size": {
          "description": "Serving size in g (or ml for drinks). Required when basis is per_serving.",
          "type": "number",
          "exclusiveMinimum": 0
        },
        "calories_kcal": {
          "type": "number",
          "minimum": 0
        },
        "energy_kj": {
          "type": "number",
          "minimum": 0
        },
        "total_fat_g": {
          "type": "number",
          "minimum": 0
        },
        "saturated_fat_g": {
          "type": "number",
          "minimum": 0
        },
        "trans_fat_g": {
          "type": "number",
          "minimum": 0
        },
        "carbohydrates_g": {
          "type": "number",
          "minimum": 0
        },
        "sugars_g": {
          "description": "Total sugars.",
          "type": "number",
          "minimum": 0
        },
        "added_sugars_g": {
          "type": "number",
          "minimum": 0
        },
        "fiber_g": {
          "type": "number",
          "minimum": 0
        },
        "protein_g": {
          "type": "number",
          "minimum": 0
        },
        "salt_g": {
          "type": "number",
          "minimum": 0
        },
        "sodium_mg": {
          "description": "Sodium in milligrams (US labels). Use salt_g instead if the label shows salt.",
          "type": "number",
          "minimum": 0
        }
      },
      "required": [
        "basis"
      ],
      "description": "The nutrition facts table, copied exactly."
    },
    "is_drink": {
      "description": "True for beverages (milk and plant drinks included). Values are then per 100 ml.",
      "type": "boolean"
    },
    "category": {
      "description": "Nutri-Score family. Use fat_oil_nuts_seeds for oils, butter, nuts and nut butters; cheese for cheese; red_meat for beef, pork or lamb products.",
      "type": "string",
      "enum": [
        "general",
        "beverage",
        "water",
        "cheese",
        "fat_oil_nuts_seeds",
        "red_meat"
      ]
    },
    "fruit_veg_percent": {
      "description": "% of fruit, vegetables and legumes, if the label states it.",
      "type": "number",
      "minimum": 0,
      "maximum": 100
    }
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢find_healthier_alternatives(barcode, country, limit)

Finds similar products in the same Open Food Facts category that score clearly higher than the given product, best first, each with its score.

Input Schema

{
  "type": "object",
  "properties": {
    "barcode": {
      "type": "string",
      "description": "Barcode of the product to beat."
    },
    "country": {
      "description": "Only suggest products sold in this country, e.g. 'united-states'.",
      "type": "string"
    },
    "limit": {
      "type": "integer",
      "minimum": 1,
      "maximum": 10
    }
  },
  "required": [
    "barcode"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}
🟢explain_additive(additive)

Explains what a food additive is, what it does, and its risk level with sources, by E-number (E250) or name (sodium nitrite, Red 40, carrageenan).

Input Schema

{
  "type": "object",
  "properties": {
    "additive": {
      "type": "string",
      "description": "E-number or name, e.g. 'E471' or 'Red 40'."
    }
  },
  "required": [
    "additive"
  ],
  "$schema": "https://json-schema.org/draft/2020-12/schema"
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded4 tools