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]
- 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:
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
Add it to ChatGPT
Use the hosted URL or your own deployment. ChatGPT can't reach localhost.
- Go to chatgpt.com/plugins, click +, then Add custom MCP server.
- Server URL:
https://foodchecker-ebon.vercel.app/mcp. Authentication: No authentication.
- 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:
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
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.