FoodChecker

io.github.kjagsadvisorsPublished by GitHub account kjagsadvisorsv0.1.0Updated Oct 27, 2026

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

VerifiedStreamable HTTPWeb executableLocation & LifestyleData & Analytics

Overview

AI-generated overview

Scores packaged food and drinks 0-100 for health using Open Food Facts data, label text or photos, and explains additives.

What you can do
  • Look up a product by barcode or name and get a 0-100 health score with nutrition, additive and processing reasons
  • Score a product from a label photo or pasted ingredient and nutrition text, including items not in the database
  • Find similar products in the same category that score clearly higher
  • Explain a food additive by E-number or name, with its risk level and sources
When to use it
Useful when you want quick, explainable answers to "is this healthy?" while shopping or planning meals, or when comparing a product with healthier alternatives in its category. It suits chat assistants that should show a score card inline.
Requirements
A remote MCP endpoint; no login or API key is needed. The hosted instance is public, or you can self-host with Node.js and npm. Self-hosting calls the Open Food Facts API, which asks apps to identify themselves via the OFF_USER_AGENT setting and limits lookups per IP.
Before you install
Scores are informational, not medical advice, and depend on Open Food Facts data and the project's own methodology. All tools are described as read-only and need no login. Label photos or pasted label text you submit are sent to the server for scoring; self-hosted deployments should set OFF_USER_AGENT with a contact address.

Installation

In SourceWeft

  1. Open FoodChecker in the dashboard and add it to a workspace.
  2. Enable the server for the chats that should use its tools.

Web executable via Streamable HTTP. Remote servers run from the web runtime once configured in a workspace.

Use with an agent

Paste this prompt into Claude Code, Codex, Cursor or another agent — or into SourceWeft chat. The agent reads this server's install guide, shows you its publisher, endpoint and sign-in, and adds it to your client once you agree. Keys never go into a command.

Read https://sourceweft.com/mcp/io.github.kjagsadvisors%2Ffoodchecker/install.md and connect the MCP server it describes to my client. Before changing any config, show me its publisher, endpoint and sign-in method and wait for my OK. Never put an API key in a command or in a file I would commit; ask me where it should come from.

Read the install guide the agent follows

Other MCP clients

Add this to your client's mcpServers config.

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

README

FoodChecker

An open-source food label checker for ChatGPT and Claude. Ask "is this healthy?" with a barcode, a product name or a photo of the label. You get a 0-100 score with the reasons, the way Yuka or Oasis would show it, but inside your chat and with a scoring method anyone can read.

[Score card for Coca-Cola: 15/100, Bad]

ScoreRating
75-100Excellent
50-74Good
25-49Poor
0-24Bad
  • Nutrition: based on Nutri-Score 2023.
  • Additives: each one has a risk level and a cited reason.
  • Processing: based on NOVA, with a note on why a food counts as ultra-processed.
  • Alternatives: suggests healthier products in the same category.
  • Data: over 3 million products from Open Food Facts. Labels you photograph are scored too, even products that aren't in the database.

How the score is built: docs/METHODOLOGY.md.

How it works

One MCP server serves both assistants. ChatGPT and Claude both implement the open MCP Apps standard, so the same score card renders inline in each of them:

ChatGPT / Claude  ──MCP──▶  FoodChecker server  ──▶  Open Food Facts API       ▲                         │       └──── score card (MCP Apps UI) + text summary
ToolWhat it does
check_foodLook up a product by barcode or name, and score it
analyze_labelScore a product from its label (photo or pasted text), including US per-serving labels
find_healthier_alternativesFind similar products that score clearly higher
explain_additiveExplain an additive by E-number or name ("E471", "Red 40") with its risk level and sources

All tools are read-only and need no login.

Use the hosted server

A public instance runs at https://foodchecker-ebon.vercel.app/mcp. Paste that URL into ChatGPT or Claude as shown below. You can try the score card in a browser at https://foodchecker-ebon.vercel.app.

Run it locally

bash
npm installnpm run dev

Add it to ChatGPT

Use the hosted URL or your own deployment. ChatGPT can't reach localhost.

  1. Go to chatgpt.com/plugins, click +, then Add custom MCP server.
  2. Server URL: https://foodchecker-ebon.vercel.app/mcp. Authentication: No authentication.
  3. Create it, then ask: "Is Nutella healthy?"

To list it in the ChatGPT app directory, follow OpenAI's submission flow at platform.openai.com/plugins. FoodChecker already supports two of its requirements through environment variables:

  • OPENAI_APPS_CHALLENGE: the domain-verification token, served at /.well-known/openai-apps-challenge.
  • CHATGPT_WIDGET_DOMAIN: your widget origin.

You'll also need a privacy policy URL, a terms URL, test prompts and a demo video.

Add it to Claude

  • claude.ai or Claude Desktop: go to Customize → Connectors → Add custom connector, paste https://foodchecker-ebon.vercel.app/mcp, and choose No sign-in. The score card renders on web, desktop and mobile.

  • Claude Code, remote server: run claude mcp add --transport http foodchecker https://foodchecker-ebon.vercel.app/mcp.

  • Claude Code, local server: run claude mcp add foodchecker -- npx tsx /path/to/repo/src/stdio.ts.

  • Claude Code plugin with a usage skill: this repo is a plugin marketplace. It points at the hosted server. If you self-host, change the URL in plugins/foodchecker/.mcp.json. Then run:

    /plugin marketplace add kjagsadvisors/foodchecker/plugin install foodchecker@foodchecker

Claude Code shows text, not the score card. The text summary carries the same information.

Deploy

The server is a standard web Request → Response handler (src/app.ts), so it runs almost anywhere.

  • Docker (Render, Fly.io, Railway, any VPS): docker build -t foodchecker . && docker run -p 3000:3000 foodchecker
  • Vercel: vercel deploy. vercel.json builds the project and routes everything to api/index.js.
  • Plain Node: npm run build && npm start

Set OFF_USER_AGENT to FoodChecker/0.1.0 (your contact email). Open Food Facts asks every app to identify itself. See .env.example for the other settings.

Rate limits: Open Food Facts allows roughly 15 product lookups and 10 searches per minute per IP. FoodChecker caches results in memory (products for 12 hours, searches for 1 hour). For heavy traffic, load the Open Food Facts data dump into your own database.

Project layout

src/core/        scoring engine: Nutri-Score 2023, additive table, ingredient parser, 0-100 scoresrc/off/         Open Food Facts client and data normalisationsrc/mcp/         MCP server, tool definitions, score-card widget, text summariessrc/app.ts       web handler: /mcp, /preview, landing pagesrc/http.ts      Node server       src/stdio.ts   local stdio serverplugins/         Claude Code plugin (MCP config + food-check skill)test/            scoring tests     scripts/       smoke test, dev MCP Apps host

Contributing

The most useful contributions are:

  • Additive table (src/core/additives.ts): challenge a risk level with a source, or add a missing additive and its label names in your language.
  • Ingredient parsing (src/core/ingredients.ts): label wording that gets missed. Add a test case in test/scoring.test.ts.
  • Product data: fix the product on Open Food Facts and everyone benefits.

npm run dev:host builds a small MCP Apps host on the official AppBridge. Then open /dev/host?barcode=… to check the widget the way ChatGPT and Claude embed it.

License and data

  • Code: MIT.
  • Product data: © Open Food Facts contributors, under the Open Database License. Product images are under CC BY-SA. Keep the attribution that the score card and text summaries show.

FoodChecker gives general information about packaged food. It is not medical advice.

Source: README.md at commit f14c992

Tools

4

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.

Parametersquerybarcodecountry

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.

Parametersbrandcategoryis_drinknutritionproduct_nameingredients_textfruit_veg_percent

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.

Parameterslimitbarcoderequiredcountry

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).

Parametersadditiverequired

Version history

1
  1. v0.1.0LatestOct 21, 2026

Score

100% of the applicable checks met

How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.

  • Reached in the last 30 daysRequired25 pts
  • Auth declaredRequired10 pts
  • Tools listedRequired15 pts
  • DescriptionRequired15 pts
  • Logo10 pts
  • Documentation15 pts
  • License10 pts