FoodChecker MCP
FoodChecker is an open-source MCP server that provides a 0-100 health score for food products based on nutrition, additive risks, and processing levels. It uses Open Food Facts data to allow users to check products by barcode, name, or label photo, and suggests healthier alternatives. The server supports tools for checking food, analyzing labels, finding alternatives, and explaining additives.
Endpoint and access
No sign-in to connect and list tools. Individual tools may still need a vendor account, credentials, or permissions; check the documented prerequisites.
https://foodchecker-ebon.vercel.app/mcpWhat you can do with it
- Look up a product by barcode or name and score it
- Score a product from its label photo or pasted text
- Find similar products that score clearly higher
- Explain an additive by E-number or name with risk level
Source and maintenance
- Maintenance checked
Protocol and capabilities
- Server
- foodchecker 0.1.0
- MCP protocol
- 2025-06-18
- Tools
- 4 advertised
- Resources
- 1 advertised
- Resource templates
- 0 advertised
- Prompts
- Not advertised
{
"tools": {
"listChanged": true
},
"resources": {
"listChanged": true
}
}Server-provided instructions
Untrusted server output shown for inspection. It is not Koskamo guidance and is excluded from knowledge search.
Tools
4 advertised
check_food — Check a food product
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.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"query": {
"type": "string",
"description": "Product name, ideally with the brand, e.g. 'Nutella hazelnut spread'. Used when there is no barcode."
},
"barcode": {
"type": "string",
"description": "EAN/UPC barcode digits, e.g. 3017620422003."
},
"country": {
"type": "string",
"description": "Optional country to prefer when searching by name, e.g. 'united-states', 'france', 'united-kingdom'."
}
}
}{
"title": "Check a food product",
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}analyze_label — Score a food from its label
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.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"properties": {
"brand": {
"type": "string"
},
"category": {
"enum": [
"general",
"beverage",
"water",
"cheese",
"fat_oil_nuts_seeds",
"red_meat"
],
"type": "string",
"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."
},
"is_drink": {
"type": "boolean",
"description": "True for beverages (milk and plant drinks included). Values are then per 100 ml."
},
"nutrition": {
"type": "object",
"required": [
"basis"
],
"properties": {
"basis": {
"enum": [
"per_100g",
"per_serving"
],
"type": "string",
"description": "What the numbers refer to. EU labels are usually per 100 g/ml; US Nutrition Facts are per serving."
},
"salt_g": {
"type": "number",
"minimum": 0
},
"fiber_g": {
"type": "number",
"minimum": 0
},
"sugars_g": {
"type": "number",
"minimum": 0,
"description": "Total sugars."
},
"energy_kj": {
"type": "number",
"minimum": 0
},
"protein_g": {
"type": "number",
"minimum": 0
},
"sodium_mg": {
"type": "number",
"minimum": 0,
"description": "Sodium in milligrams (US labels). Use salt_g instead if the label shows salt."
},
"total_fat_g": {
"type": "number",
"minimum": 0
},
"trans_fat_g": {
"type": "number",
"minimum": 0
},
"serving_size": {
"type": "number",
"description": "Serving size in g (or ml for drinks). Required when basis is per_serving.",
"exclusiveMinimum": 0
},
"calories_kcal": {
"type": "number",
"minimum": 0
},
"added_sugars_g": {
"type": "number",
"minimum": 0
},
"carbohydrates_g": {
"type": "number",
"minimum": 0
},
"saturated_fat_g": {
"type": "number",
"minimum": 0
}
},
"description": "The nutrition facts table, copied exactly."
},
"product_name": {
"type": "string"
},
"ingredients_text": {
"type": "string",
"description": "The full ingredient list exactly as printed."
},
"fruit_veg_percent": {
"type": "number",
"maximum": 100,
"minimum": 0,
"description": "% of fruit, vegetables and legumes, if the label states it."
}
}
}{
"title": "Score a food from its label",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}find_healthier_alternatives — Find healthier alternatives
Finds similar products in the same Open Food Facts category that score clearly higher than the given product, best first, each with its score.
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"barcode"
],
"properties": {
"limit": {
"type": "integer",
"maximum": 10,
"minimum": 1
},
"barcode": {
"type": "string",
"description": "Barcode of the product to beat."
},
"country": {
"type": "string",
"description": "Only suggest products sold in this country, e.g. 'united-states'."
}
}
}{
"title": "Find healthier alternatives",
"readOnlyHint": true,
"openWorldHint": true,
"idempotentHint": true,
"destructiveHint": false
}explain_additive — Explain a food 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).
{
"type": "object",
"$schema": "https://json-schema.org/draft/2020-12/schema",
"required": [
"additive"
],
"properties": {
"additive": {
"type": "string",
"description": "E-number or name, e.g. 'E471' or 'Red 40'."
}
}
}{
"title": "Explain a food additive",
"readOnlyHint": true,
"openWorldHint": false,
"idempotentHint": true,
"destructiveHint": false
}Prompts
Not advertised
Resources
1 advertised
FoodChecker score card
Interactive health score card for a food product.
ui://foodchecker/score-card-v1.html30-day availability
Aggregated from read-only remote checks; this is not a tool-execution or security guarantee.
- Successful checks
- 1 of 1 (100%)
- Average latency
- 1034 ms
- 95th percentile latency
- 1034 ms
Maintenance history
Public check and source-refresh events. Editorial and ownership records remain private.
- · probe · passed · 1034 ms · metadata changed · 4 tool(s), 1 resource(s), 0 resource template(s)
Connect from your client
Each snippet registers the same endpoint; pick the client you use.
Claude Code
claude mcp add --transport http foodchecker-mcp https://foodchecker-ebon.vercel.app/mcpCodex
codex mcp add foodchecker-mcp --url https://foodchecker-ebon.vercel.app/mcpCursor
{
"mcpServers": {
"foodchecker-mcp": {
"url": "https://foodchecker-ebon.vercel.app/mcp"
}
}
}Cline
{
"mcpServers": {
"foodchecker-mcp": {
"type": "streamableHttp",
"url": "https://foodchecker-ebon.vercel.app/mcp",
"disabled": false
}
}
}VS Code
{
"servers": {
"foodchecker-mcp": {
"type": "http",
"url": "https://foodchecker-ebon.vercel.app/mcp"
}
}
}Gemini CLI
gemini mcp add --transport http foodchecker-mcp https://foodchecker-ebon.vercel.app/mcpClaude Desktop
{
"mcpServers": {
"foodchecker-mcp": {
"url": "https://foodchecker-ebon.vercel.app/mcp"
}
}
}Windsurf
{
"mcpServers": {
"foodchecker-mcp": {
"serverUrl": "https://foodchecker-ebon.vercel.app/mcp"
}
}
}Let your agent find its tools
Find servers like FoodChecker MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.