@cyanheads/openfoodfacts-mcp-server 0.3.9 → 0.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/AGENTS.md +20 -7
- package/CLAUDE.md +20 -7
- package/Dockerfile +6 -0
- package/README.md +28 -117
- package/changelog/0.4.x/0.4.0.md +30 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/mcp-server/tools/definitions/browse-taxonomy.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/browse-taxonomy.tool.js +5 -0
- package/dist/mcp-server/tools/definitions/browse-taxonomy.tool.js.map +1 -1
- package/dist/mcp-server/tools/definitions/search-products.tool.d.ts.map +1 -1
- package/dist/mcp-server/tools/definitions/search-products.tool.js +13 -12
- package/dist/mcp-server/tools/definitions/search-products.tool.js.map +1 -1
- package/package.json +7 -6
- package/server.json +3 -3
- package/skills/openfoodfacts-guide/SKILL.md +41 -0
package/AGENTS.md
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
# Developer Protocol
|
|
2
2
|
|
|
3
3
|
**Server:** openfoodfacts-mcp-server
|
|
4
|
-
**Version:** 0.
|
|
5
|
-
**Framework:** [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) `^0.13.
|
|
4
|
+
**Version:** 0.4.0
|
|
5
|
+
**Framework:** [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) `^0.13.18`
|
|
6
6
|
**Engines:** Bun ≥1.4.0, Node ≥24.0.0
|
|
7
|
-
**MCP SDK:** `@modelcontextprotocol/server` ^2.
|
|
7
|
+
**MCP SDK:** `@modelcontextprotocol/server` ^2.4.0
|
|
8
8
|
**Zod:** ^4.6.7
|
|
9
9
|
|
|
10
10
|
> **Read the framework docs first:** `node_modules/@cyanheads/mcp-ts-core/CLAUDE.md` contains the full API reference — builders, Context, error codes, exports, patterns. This file covers server-specific conventions only.
|
|
@@ -239,9 +239,18 @@ src/
|
|
|
239
239
|
|
|
240
240
|
## Skills
|
|
241
241
|
|
|
242
|
-
|
|
242
|
+
Two skill trees live at the project root, written for different readers:
|
|
243
243
|
|
|
244
|
-
|
|
244
|
+
| Tree | For | Written by |
|
|
245
|
+
|:-----|:----|:-----------|
|
|
246
|
+
| `framework-skills/` | The agent developing this server — framework skills (`metadata.audience: external`) plus any development-time skills of the server's own | `init` and the `maintenance` sync (framework skills); you (your own) |
|
|
247
|
+
| `skills/` | The agents that install the server and call its tools — tool chains, identifier sources, gates | You, deliberately, with the `add-skill` skill. Absent by default; usually none is needed |
|
|
248
|
+
|
|
249
|
+
Development skills are modular instructions. Read them directly when a task matches — e.g., `framework-skills/add-tool/SKILL.md` when adding a tool. `bun run list-skills` prints the full registry. Their directory is deliberately not `skills/`: Claude Code and Codex auto-load a plugin's root `skills/`, so a server that ships `.claude-plugin/` or `.codex-plugin/` would hand them to every agent that installs it.
|
|
250
|
+
|
|
251
|
+
A published skill in root `skills/` reaches plugin installs and the `.mcpb` bundle as-is, ships in the npm package and the Docker image, and reaches MCP clients when the server opts in with `createApp({ skills: 'skills' })`. `lint:packaging` validates the tree.
|
|
252
|
+
|
|
253
|
+
**Agent skill directory:** Copy `framework-skills/` into the directory your agent discovers (Claude Code: `.claude/skills/`, others: equivalent). Skills then load as context without referencing `framework-skills/` paths. After framework updates, run the `maintenance` skill — Phase B re-syncs the agent directory.
|
|
245
254
|
|
|
246
255
|
Available skills:
|
|
247
256
|
|
|
@@ -253,6 +262,7 @@ Available skills:
|
|
|
253
262
|
| `add-app-tool` | Scaffold an MCP App tool + paired UI resource |
|
|
254
263
|
| `add-resource` | Scaffold a new resource definition |
|
|
255
264
|
| `add-prompt` | Scaffold a new prompt definition |
|
|
265
|
+
| `add-skill` | Author a skill the server publishes in root `skills/` for the agents that use it — when one earns its place, structure, validation, delivery |
|
|
256
266
|
| `add-service` | Scaffold a new service integration |
|
|
257
267
|
| `add-test` | Scaffold test file for a tool, resource, or service |
|
|
258
268
|
| `field-test` | Exercise tools/resources/prompts with real inputs, verify behavior, report issues |
|
|
@@ -300,7 +310,7 @@ When you complete a skill's checklist, check the boxes and add a completion time
|
|
|
300
310
|
| `bun run audit:fix` | `bun audit fix` — upgrade vulnerable packages to the lowest safe version within existing ranges (`--dry-run` previews, `--latest` rewrites ranges). First response when `devcheck` flags a transitive advisory; then `bun update <name>`, then `bun dedupe` |
|
|
301
311
|
| `bun run audit:refresh` | Delete `bun.lock` and reinstall. Last resort after `audit:fix`, `bun update <name>`, and `bun dedupe` — re-resolves every ranged dep (the framework pin included) and rewrites the lockfile as `lockfileVersion: 2` |
|
|
302
312
|
| `bun run lint:mcp` | Run the MCP definition linter standalone (rule catalog: `api-linter` skill) |
|
|
303
|
-
| `bun run lint:packaging` | Packaging surface checks — `server.json`/`manifest.json` env-var parity (run by devcheck) |
|
|
313
|
+
| `bun run lint:packaging` | Packaging surface checks — `server.json`/`manifest.json` env-var parity, `.mcpbignore` coverage, plugin manifests, the published `skills/` tree (run by devcheck) |
|
|
304
314
|
| `bun run list-skills` | Print the skill registry |
|
|
305
315
|
| `bun run tree` | Generate directory structure doc |
|
|
306
316
|
| `bun run format` | Auto-fix formatting (safe fixes only) |
|
|
@@ -318,7 +328,7 @@ When you complete a skill's checklist, check the boxes and add a completion time
|
|
|
318
328
|
|
|
319
329
|
## Bundling
|
|
320
330
|
|
|
321
|
-
`bun run bundle` produces a `.mcpb` extension bundle for one-click install in Claude Desktop. The pack step is followed by `scripts/clean-mcpb.ts`, which prunes dev dependencies (`mcpb clean`) and strips
|
|
331
|
+
`bun run bundle` produces a `.mcpb` extension bundle for one-click install in Claude Desktop. `mcpb pack` reads `.mcpbignore`, not `.gitignore`, so every root path the bundle must not ship — source, tests, docs, caches, logs, agent docs, plugin manifests, gitignored local files — needs a root-anchored line there (`/docs/`, never `docs/`, which also strips `node_modules/*/docs/`); `lint:packaging` names each missing or unanchored line. Root `skills/` ships on purpose. The pack step is followed by `scripts/clean-mcpb.ts`, which prunes dev dependencies (`mcpb clean`) and strips four classes of `node_modules/**` content that root-anchored `.mcpbignore` patterns cannot reach: dependency-shipped agent docs (`framework-skills/`, `skills/`, `.claude/`, `.agents/`, `SKILL.md`); platform-specific native bindings, which would otherwise lock the bundle to the platform it was packed on; node-gyp build output beside a `binding.gyp` (`config.gypi`, Makefiles, `obj.target/`, `.deps/`, object files and debug symbols), which records the packing machine's paths — compiled `*.node` addons stay; and build-only package files — the framework's `changelog/`, `scripts/`, `templates/`, `CLAUDE.md`, `AGENTS.md`, and config bases (`biome.json`, `vitest.config.base.mjs`, `config/tsconfig.base.json`), and `better-sqlite3`'s `deps/` and `src/` C sources. A server using DataCanvas therefore ships a portable bundle without the DuckDB native — `@duckdb/node-api` is an optional peer loaded lazily, so canvas tools report an actionable install hint and every other tool works normally. MCPB is stdio-only — HTTP and Cloudflare Workers deployments are unaffected. Consumers who don't need it can delete `manifest.json` and `.mcpbignore`; `lint:packaging` skips cleanly.
|
|
322
332
|
|
|
323
333
|
**Adding an env var requires both files:** `server.json` (registry discovery, `environmentVariables[]`) and `manifest.json` (bundle install UX, `mcp_config.env` + `user_config`). `lint:packaging` (run by `devcheck`) verifies the env var names match, that every `user_config` option is wired into `mcp_config.env` as `"X": "${user_config.X}"` (the host substitutes nothing else — `"${X}"` reaches the server as that literal string), and that an optional string option carries `"default": ""`.
|
|
324
334
|
|
|
@@ -385,7 +395,10 @@ import { getMyService } from '@/services/my-domain/my-service.js';
|
|
|
385
395
|
- [ ] If wrapping external API: tests include at least one sparse payload case with omitted upstream fields
|
|
386
396
|
- [ ] Registered in `createApp()` arrays (directly or via barrel exports)
|
|
387
397
|
- [ ] Tests use `createMockContext()` from `@cyanheads/mcp-ts-core/testing`
|
|
398
|
+
- [ ] `plugin.json` + `mcp.json` (Agent Plugins 1.0.0 — read by Codex, Cursor, GitHub Copilot, VS Code, Kiro) populated — `plugin.json` `name` = the unscoped repo name (lowercase `a-z`, `0-9`, `-`, `.` only); `version`, `description`, `author`, `homepage`, `repository`, `license`, `keywords` from `package.json`; no other top-level field, `extensions` included. `mcp.json` holds one `"type": "stdio"` entry keyed by the unscoped name, `npx -y <full package name>`, and the same fixed `env` as `.codex-plugin/mcp.json`. Neither file carries a user-supplied variable (no `""`, no `${…}` besides `${PLUGIN_ROOT}`/`${PLUGIN_DATA}`): keys reach Codex through `.codex-plugin/mcp.json` `env_vars`, which works only while `.codex-plugin/plugin.json` keeps `"mcpServers": "./.codex-plugin/mcp.json"`
|
|
388
399
|
- [ ] `.codex-plugin/plugin.json` populated — `name`, `version`, `description`, `repository`, `license` from `package.json`; `interface.displayName` = the unscoped repo name (never the npm scope — `lint:packaging` enforces this); `interface.shortDescription` from `package.json` description
|
|
389
400
|
- [ ] `.codex-plugin/mcp.json` updated — server name key is the unscoped repo name; every user-supplied variable (API key, contact email, instance URL) is listed in `env_vars` so Codex forwards it from the user's environment. Never write `"KEY": ""` into `env` — an empty value replaces the user's exported key and is read as unset
|
|
390
401
|
- [ ] `.claude-plugin/plugin.json` populated — `name`, `version`, `description`, `author`, `repository`, `license`, `keywords` from `package.json`; inline `mcpServers` entry keyed by the unscoped repo name. Every user-supplied variable is declared under `userConfig` (`type`, `title`, `description`; `sensitive: true` for keys and tokens; `required: true` or `default: ""`) and referenced from `env` as `"KEY": "${user_config.<option>}"` — mirror the `user_config` block in `manifest.json`. Never write `"KEY": ""` into `env`
|
|
402
|
+
- [ ] Any new root dev path has a root-anchored line in `.mcpbignore`; `bun run bundle` and `lint:packaging` pass
|
|
403
|
+
- [ ] If the server publishes a skill in root `skills/`: `lint:packaging` passes, and `field-test` verified every gate and identifier claim in it against live tool behavior
|
|
391
404
|
- [ ] `npm run devcheck` passes
|
package/CLAUDE.md
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
# Developer Protocol
|
|
2
2
|
|
|
3
3
|
**Server:** openfoodfacts-mcp-server
|
|
4
|
-
**Version:** 0.
|
|
5
|
-
**Framework:** [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) `^0.13.
|
|
4
|
+
**Version:** 0.4.0
|
|
5
|
+
**Framework:** [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) `^0.13.18`
|
|
6
6
|
**Engines:** Bun ≥1.4.0, Node ≥24.0.0
|
|
7
|
-
**MCP SDK:** `@modelcontextprotocol/server` ^2.
|
|
7
|
+
**MCP SDK:** `@modelcontextprotocol/server` ^2.4.0
|
|
8
8
|
**Zod:** ^4.6.7
|
|
9
9
|
|
|
10
10
|
> **Read the framework docs first:** `node_modules/@cyanheads/mcp-ts-core/CLAUDE.md` contains the full API reference — builders, Context, error codes, exports, patterns. This file covers server-specific conventions only.
|
|
@@ -239,9 +239,18 @@ src/
|
|
|
239
239
|
|
|
240
240
|
## Skills
|
|
241
241
|
|
|
242
|
-
|
|
242
|
+
Two skill trees live at the project root, written for different readers:
|
|
243
243
|
|
|
244
|
-
|
|
244
|
+
| Tree | For | Written by |
|
|
245
|
+
|:-----|:----|:-----------|
|
|
246
|
+
| `framework-skills/` | The agent developing this server — framework skills (`metadata.audience: external`) plus any development-time skills of the server's own | `init` and the `maintenance` sync (framework skills); you (your own) |
|
|
247
|
+
| `skills/` | The agents that install the server and call its tools — tool chains, identifier sources, gates | You, deliberately, with the `add-skill` skill. Absent by default; usually none is needed |
|
|
248
|
+
|
|
249
|
+
Development skills are modular instructions. Read them directly when a task matches — e.g., `framework-skills/add-tool/SKILL.md` when adding a tool. `bun run list-skills` prints the full registry. Their directory is deliberately not `skills/`: Claude Code and Codex auto-load a plugin's root `skills/`, so a server that ships `.claude-plugin/` or `.codex-plugin/` would hand them to every agent that installs it.
|
|
250
|
+
|
|
251
|
+
A published skill in root `skills/` reaches plugin installs and the `.mcpb` bundle as-is, ships in the npm package and the Docker image, and reaches MCP clients when the server opts in with `createApp({ skills: 'skills' })`. `lint:packaging` validates the tree.
|
|
252
|
+
|
|
253
|
+
**Agent skill directory:** Copy `framework-skills/` into the directory your agent discovers (Claude Code: `.claude/skills/`, others: equivalent). Skills then load as context without referencing `framework-skills/` paths. After framework updates, run the `maintenance` skill — Phase B re-syncs the agent directory.
|
|
245
254
|
|
|
246
255
|
Available skills:
|
|
247
256
|
|
|
@@ -253,6 +262,7 @@ Available skills:
|
|
|
253
262
|
| `add-app-tool` | Scaffold an MCP App tool + paired UI resource |
|
|
254
263
|
| `add-resource` | Scaffold a new resource definition |
|
|
255
264
|
| `add-prompt` | Scaffold a new prompt definition |
|
|
265
|
+
| `add-skill` | Author a skill the server publishes in root `skills/` for the agents that use it — when one earns its place, structure, validation, delivery |
|
|
256
266
|
| `add-service` | Scaffold a new service integration |
|
|
257
267
|
| `add-test` | Scaffold test file for a tool, resource, or service |
|
|
258
268
|
| `field-test` | Exercise tools/resources/prompts with real inputs, verify behavior, report issues |
|
|
@@ -300,7 +310,7 @@ When you complete a skill's checklist, check the boxes and add a completion time
|
|
|
300
310
|
| `bun run audit:fix` | `bun audit fix` — upgrade vulnerable packages to the lowest safe version within existing ranges (`--dry-run` previews, `--latest` rewrites ranges). First response when `devcheck` flags a transitive advisory; then `bun update <name>`, then `bun dedupe` |
|
|
301
311
|
| `bun run audit:refresh` | Delete `bun.lock` and reinstall. Last resort after `audit:fix`, `bun update <name>`, and `bun dedupe` — re-resolves every ranged dep (the framework pin included) and rewrites the lockfile as `lockfileVersion: 2` |
|
|
302
312
|
| `bun run lint:mcp` | Run the MCP definition linter standalone (rule catalog: `api-linter` skill) |
|
|
303
|
-
| `bun run lint:packaging` | Packaging surface checks — `server.json`/`manifest.json` env-var parity (run by devcheck) |
|
|
313
|
+
| `bun run lint:packaging` | Packaging surface checks — `server.json`/`manifest.json` env-var parity, `.mcpbignore` coverage, plugin manifests, the published `skills/` tree (run by devcheck) |
|
|
304
314
|
| `bun run list-skills` | Print the skill registry |
|
|
305
315
|
| `bun run tree` | Generate directory structure doc |
|
|
306
316
|
| `bun run format` | Auto-fix formatting (safe fixes only) |
|
|
@@ -318,7 +328,7 @@ When you complete a skill's checklist, check the boxes and add a completion time
|
|
|
318
328
|
|
|
319
329
|
## Bundling
|
|
320
330
|
|
|
321
|
-
`bun run bundle` produces a `.mcpb` extension bundle for one-click install in Claude Desktop. The pack step is followed by `scripts/clean-mcpb.ts`, which prunes dev dependencies (`mcpb clean`) and strips
|
|
331
|
+
`bun run bundle` produces a `.mcpb` extension bundle for one-click install in Claude Desktop. `mcpb pack` reads `.mcpbignore`, not `.gitignore`, so every root path the bundle must not ship — source, tests, docs, caches, logs, agent docs, plugin manifests, gitignored local files — needs a root-anchored line there (`/docs/`, never `docs/`, which also strips `node_modules/*/docs/`); `lint:packaging` names each missing or unanchored line. Root `skills/` ships on purpose. The pack step is followed by `scripts/clean-mcpb.ts`, which prunes dev dependencies (`mcpb clean`) and strips four classes of `node_modules/**` content that root-anchored `.mcpbignore` patterns cannot reach: dependency-shipped agent docs (`framework-skills/`, `skills/`, `.claude/`, `.agents/`, `SKILL.md`); platform-specific native bindings, which would otherwise lock the bundle to the platform it was packed on; node-gyp build output beside a `binding.gyp` (`config.gypi`, Makefiles, `obj.target/`, `.deps/`, object files and debug symbols), which records the packing machine's paths — compiled `*.node` addons stay; and build-only package files — the framework's `changelog/`, `scripts/`, `templates/`, `CLAUDE.md`, `AGENTS.md`, and config bases (`biome.json`, `vitest.config.base.mjs`, `config/tsconfig.base.json`), and `better-sqlite3`'s `deps/` and `src/` C sources. A server using DataCanvas therefore ships a portable bundle without the DuckDB native — `@duckdb/node-api` is an optional peer loaded lazily, so canvas tools report an actionable install hint and every other tool works normally. MCPB is stdio-only — HTTP and Cloudflare Workers deployments are unaffected. Consumers who don't need it can delete `manifest.json` and `.mcpbignore`; `lint:packaging` skips cleanly.
|
|
322
332
|
|
|
323
333
|
**Adding an env var requires both files:** `server.json` (registry discovery, `environmentVariables[]`) and `manifest.json` (bundle install UX, `mcp_config.env` + `user_config`). `lint:packaging` (run by `devcheck`) verifies the env var names match, that every `user_config` option is wired into `mcp_config.env` as `"X": "${user_config.X}"` (the host substitutes nothing else — `"${X}"` reaches the server as that literal string), and that an optional string option carries `"default": ""`.
|
|
324
334
|
|
|
@@ -385,7 +395,10 @@ import { getMyService } from '@/services/my-domain/my-service.js';
|
|
|
385
395
|
- [ ] If wrapping external API: tests include at least one sparse payload case with omitted upstream fields
|
|
386
396
|
- [ ] Registered in `createApp()` arrays (directly or via barrel exports)
|
|
387
397
|
- [ ] Tests use `createMockContext()` from `@cyanheads/mcp-ts-core/testing`
|
|
398
|
+
- [ ] `plugin.json` + `mcp.json` (Agent Plugins 1.0.0 — read by Codex, Cursor, GitHub Copilot, VS Code, Kiro) populated — `plugin.json` `name` = the unscoped repo name (lowercase `a-z`, `0-9`, `-`, `.` only); `version`, `description`, `author`, `homepage`, `repository`, `license`, `keywords` from `package.json`; no other top-level field, `extensions` included. `mcp.json` holds one `"type": "stdio"` entry keyed by the unscoped name, `npx -y <full package name>`, and the same fixed `env` as `.codex-plugin/mcp.json`. Neither file carries a user-supplied variable (no `""`, no `${…}` besides `${PLUGIN_ROOT}`/`${PLUGIN_DATA}`): keys reach Codex through `.codex-plugin/mcp.json` `env_vars`, which works only while `.codex-plugin/plugin.json` keeps `"mcpServers": "./.codex-plugin/mcp.json"`
|
|
388
399
|
- [ ] `.codex-plugin/plugin.json` populated — `name`, `version`, `description`, `repository`, `license` from `package.json`; `interface.displayName` = the unscoped repo name (never the npm scope — `lint:packaging` enforces this); `interface.shortDescription` from `package.json` description
|
|
389
400
|
- [ ] `.codex-plugin/mcp.json` updated — server name key is the unscoped repo name; every user-supplied variable (API key, contact email, instance URL) is listed in `env_vars` so Codex forwards it from the user's environment. Never write `"KEY": ""` into `env` — an empty value replaces the user's exported key and is read as unset
|
|
390
401
|
- [ ] `.claude-plugin/plugin.json` populated — `name`, `version`, `description`, `author`, `repository`, `license`, `keywords` from `package.json`; inline `mcpServers` entry keyed by the unscoped repo name. Every user-supplied variable is declared under `userConfig` (`type`, `title`, `description`; `sensitive: true` for keys and tokens; `required: true` or `default: ""`) and referenced from `env` as `"KEY": "${user_config.<option>}"` — mirror the `user_config` block in `manifest.json`. Never write `"KEY": ""` into `env`
|
|
402
|
+
- [ ] Any new root dev path has a root-anchored line in `.mcpbignore`; `bun run bundle` and `lint:packaging` pass
|
|
403
|
+
- [ ] If the server publishes a skill in root `skills/`: `lint:packaging` passes, and `field-test` verified every gate and identifier claim in it against live tool behavior
|
|
391
404
|
- [ ] `npm run devcheck` passes
|
package/Dockerfile
CHANGED
|
@@ -29,6 +29,11 @@ RUN --mount=type=cache,target=/root/.bun/install/cache \
|
|
|
29
29
|
# Copy the rest of the source code
|
|
30
30
|
COPY . .
|
|
31
31
|
|
|
32
|
+
# The skills a server publishes (`createApp({ skills: 'skills' })`) are read at
|
|
33
|
+
# runtime from the application root. Created when the project has none, so the
|
|
34
|
+
# production stage's copy below holds with or without one.
|
|
35
|
+
RUN mkdir -p skills
|
|
36
|
+
|
|
32
37
|
# Build the application
|
|
33
38
|
RUN bun run build
|
|
34
39
|
|
|
@@ -136,6 +141,7 @@ COPY --from=deps /usr/src/app/node_modules ./node_modules
|
|
|
136
141
|
|
|
137
142
|
# Copy the compiled application code from the build stage
|
|
138
143
|
COPY --from=build /usr/src/app/dist ./dist
|
|
144
|
+
COPY --from=build /usr/src/app/skills ./skills
|
|
139
145
|
|
|
140
146
|
# The 'oven/bun' image already provides a non-root user named 'bun'.
|
|
141
147
|
# We will use this existing user for enhanced security.
|
package/README.md
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
|
|
8
8
|
<div align="center">
|
|
9
9
|
|
|
10
|
-
[](./CHANGELOG.md) [](./LICENSE) [](https://github.com/users/cyanheads/packages/container/package/openfoodfacts-mcp-server) [](https://modelcontextprotocol.io/) [](https://www.npmjs.com/package/@cyanheads/openfoodfacts-mcp-server) [](https://www.typescriptlang.org/) [](https://bun.sh/)
|
|
11
11
|
|
|
12
12
|
</div>
|
|
13
13
|
|
|
@@ -40,6 +40,12 @@ Packaged-food data from Open Food Facts, a crowd-sourced database of 3M+ product
|
|
|
40
40
|
| `off_compare_products` | Compare up to 10 products per call by barcode on nutrition (per 100 g, or per 100 ml for liquids), Nutri-Score, NOVA, and Green-Score |
|
|
41
41
|
| `off_browse_taxonomy` | Resolve a human term to the canonical tag ID that `off_search_products` filters on |
|
|
42
42
|
|
|
43
|
+
### Skills
|
|
44
|
+
|
|
45
|
+
| Skill | Description |
|
|
46
|
+
|:------|:------------|
|
|
47
|
+
| `openfoodfacts-guide` | Judgment for calling the tools: allergy checks that never overclaim, choosing among a product's barcodes, where tag IDs come from, grade ranges, free-from searches, and the shared search budget. Served over MCP as `skill://openfoodfacts-guide/SKILL.md` and shipped in the plugin, npm package, and `.mcpb` bundle. |
|
|
48
|
+
|
|
43
49
|
## Capability reference
|
|
44
50
|
|
|
45
51
|
### `off_get_product` <sub>tool</sub>
|
|
@@ -93,137 +99,32 @@ Agent-friendly output:
|
|
|
93
99
|
|
|
94
100
|
## Getting started
|
|
95
101
|
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
A public instance is available at `https://openfoodfacts.caseyjhand.com/mcp` — no installation required. It serves Streamable HTTP; each client takes its own config shape.
|
|
99
|
-
|
|
100
|
-
For Claude Code:
|
|
102
|
+
Connect to the hosted instance, no install:
|
|
101
103
|
|
|
102
104
|
```sh
|
|
103
105
|
claude mcp add --transport http openfoodfacts-mcp-server https://openfoodfacts.caseyjhand.com/mcp
|
|
104
106
|
```
|
|
105
107
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
```json
|
|
109
|
-
{
|
|
110
|
-
"mcpServers": {
|
|
111
|
-
"openfoodfacts-mcp-server": {
|
|
112
|
-
"type": "streamableHttp",
|
|
113
|
-
"url": "https://openfoodfacts.caseyjhand.com/mcp"
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
}
|
|
117
|
-
```
|
|
118
|
-
|
|
119
|
-
For Cursor (`mcp.json`):
|
|
120
|
-
|
|
121
|
-
```json
|
|
122
|
-
{
|
|
123
|
-
"mcpServers": {
|
|
124
|
-
"openfoodfacts-mcp-server": {
|
|
125
|
-
"url": "https://openfoodfacts.caseyjhand.com/mcp"
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
```
|
|
130
|
-
|
|
131
|
-
Claude Desktop adds remote servers under Customize → Connectors.
|
|
132
|
-
|
|
133
|
-
### Self-Hosted / Local
|
|
108
|
+
Or run it locally:
|
|
134
109
|
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
```json
|
|
138
|
-
{
|
|
139
|
-
"mcpServers": {
|
|
140
|
-
"openfoodfacts-mcp-server": {
|
|
141
|
-
"type": "stdio",
|
|
142
|
-
"command": "bunx",
|
|
143
|
-
"args": ["@cyanheads/openfoodfacts-mcp-server@latest"],
|
|
144
|
-
"env": {
|
|
145
|
-
"MCP_TRANSPORT_TYPE": "stdio",
|
|
146
|
-
"MCP_LOG_LEVEL": "info"
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
}
|
|
150
|
-
}
|
|
110
|
+
```sh
|
|
111
|
+
claude mcp add openfoodfacts-mcp-server -- npx -y @cyanheads/openfoodfacts-mcp-server
|
|
151
112
|
```
|
|
152
113
|
|
|
153
|
-
|
|
114
|
+
For other clients, add this to the MCP config file:
|
|
154
115
|
|
|
155
116
|
```json
|
|
156
117
|
{
|
|
157
118
|
"mcpServers": {
|
|
158
119
|
"openfoodfacts-mcp-server": {
|
|
159
|
-
"type": "stdio",
|
|
160
120
|
"command": "npx",
|
|
161
|
-
"args": ["-y", "@cyanheads/openfoodfacts-mcp-server
|
|
162
|
-
"env": {
|
|
163
|
-
"MCP_TRANSPORT_TYPE": "stdio",
|
|
164
|
-
"MCP_LOG_LEVEL": "info"
|
|
165
|
-
}
|
|
121
|
+
"args": ["-y", "@cyanheads/openfoodfacts-mcp-server"]
|
|
166
122
|
}
|
|
167
123
|
}
|
|
168
124
|
}
|
|
169
125
|
```
|
|
170
126
|
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
```json
|
|
174
|
-
{
|
|
175
|
-
"mcpServers": {
|
|
176
|
-
"openfoodfacts-mcp-server": {
|
|
177
|
-
"type": "stdio",
|
|
178
|
-
"command": "docker",
|
|
179
|
-
"args": [
|
|
180
|
-
"run", "-i", "--rm",
|
|
181
|
-
"-e", "MCP_TRANSPORT_TYPE=stdio",
|
|
182
|
-
"ghcr.io/cyanheads/openfoodfacts-mcp-server:latest"
|
|
183
|
-
]
|
|
184
|
-
}
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
```
|
|
188
|
-
|
|
189
|
-
For Streamable HTTP, set the transport and start the server:
|
|
190
|
-
|
|
191
|
-
```sh
|
|
192
|
-
MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 bun run start:http
|
|
193
|
-
# Server listens at http://localhost:3010/mcp
|
|
194
|
-
```
|
|
195
|
-
|
|
196
|
-
### Prerequisites
|
|
197
|
-
|
|
198
|
-
- [Bun v1.4.0](https://bun.sh/) or higher (or Node.js v24+).
|
|
199
|
-
- No API key or account. Open Food Facts asks clients to identify themselves, and the server's `User-Agent` does so without configuration.
|
|
200
|
-
|
|
201
|
-
### Installation
|
|
202
|
-
|
|
203
|
-
1. **Clone the repository:**
|
|
204
|
-
|
|
205
|
-
```sh
|
|
206
|
-
git clone https://github.com/cyanheads/openfoodfacts-mcp-server.git
|
|
207
|
-
```
|
|
208
|
-
|
|
209
|
-
2. **Navigate into the directory:**
|
|
210
|
-
|
|
211
|
-
```sh
|
|
212
|
-
cd openfoodfacts-mcp-server
|
|
213
|
-
```
|
|
214
|
-
|
|
215
|
-
3. **Install dependencies:**
|
|
216
|
-
|
|
217
|
-
```sh
|
|
218
|
-
bun install
|
|
219
|
-
```
|
|
220
|
-
|
|
221
|
-
4. **Configure environment:**
|
|
222
|
-
|
|
223
|
-
```sh
|
|
224
|
-
cp .env.example .env
|
|
225
|
-
# edit .env if you need to override rate limits or the base URL
|
|
226
|
-
```
|
|
127
|
+
No API key or account is needed: the server identifies itself to Open Food Facts with its own `User-Agent`. For Docker or a source build, see [Running the server](#running-the-server).
|
|
227
128
|
|
|
228
129
|
## Configuration
|
|
229
130
|
|
|
@@ -246,6 +147,16 @@ See [`.env.example`](./.env.example) for the full list of optional overrides.
|
|
|
246
147
|
|
|
247
148
|
### Local development
|
|
248
149
|
|
|
150
|
+
Requires [Bun v1.4.0](https://bun.sh/) or higher (or Node.js v24+).
|
|
151
|
+
|
|
152
|
+
- **Clone and install:**
|
|
153
|
+
|
|
154
|
+
```sh
|
|
155
|
+
git clone https://github.com/cyanheads/openfoodfacts-mcp-server.git
|
|
156
|
+
cd openfoodfacts-mcp-server && bun install
|
|
157
|
+
cp .env.example .env # optional: override rate limits or the base URL
|
|
158
|
+
```
|
|
159
|
+
|
|
249
160
|
- **Build and run:**
|
|
250
161
|
|
|
251
162
|
```sh
|
|
@@ -269,22 +180,22 @@ See [`.env.example`](./.env.example) for the full list of optional overrides.
|
|
|
269
180
|
### Docker
|
|
270
181
|
|
|
271
182
|
```sh
|
|
272
|
-
docker
|
|
273
|
-
docker run --rm -p 3010:3010 openfoodfacts-mcp-server
|
|
183
|
+
docker run --rm -p 3010:3010 ghcr.io/cyanheads/openfoodfacts-mcp-server:latest
|
|
274
184
|
```
|
|
275
185
|
|
|
276
|
-
The
|
|
186
|
+
The image defaults to HTTP transport, stateless session mode, and logs to `/var/log/openfoodfacts-mcp-server`. To run it over stdio from an MCP client, use `"command": "docker"` with `"args": ["run", "-i", "--rm", "-e", "MCP_TRANSPORT_TYPE=stdio", "ghcr.io/cyanheads/openfoodfacts-mcp-server:latest"]`. To build locally, `docker build -t openfoodfacts-mcp-server .`; OpenTelemetry peer dependencies are installed by default — build with `--build-arg OTEL_ENABLED=false` to omit them.
|
|
277
187
|
|
|
278
188
|
## Project structure
|
|
279
189
|
|
|
280
190
|
| Directory | Purpose |
|
|
281
191
|
|:----------|:--------|
|
|
282
|
-
| `src/index.ts` | `createApp()` entry point — registers tools and inits services. |
|
|
192
|
+
| `src/index.ts` | `createApp()` entry point — registers tools and the published skills, and inits services. |
|
|
283
193
|
| `src/config` | Server-specific environment variable parsing and validation with Zod. |
|
|
284
194
|
| `src/mcp-server/tools` | Tool definitions (`*.tool.ts`). |
|
|
285
195
|
| `src/services/openfoodfacts` | Open Food Facts API client — HTTP, rate limiting, retry, field normalization. |
|
|
286
196
|
| `src/services/taxonomy` | Tag vocabulary — live resolution, offline sample, and tag-value canonicalization. |
|
|
287
197
|
| `src/utils` | Markdown escaping for contributor-entered values in text output. |
|
|
198
|
+
| `skills/` | Published Agent Skills for the agents that call the tools. |
|
|
288
199
|
| `tests/` | Unit and integration tests mirroring `src/`. |
|
|
289
200
|
|
|
290
201
|
## Development guide
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
---
|
|
2
|
+
summary: "Publishes the openfoodfacts-guide Agent Skill over MCP, renders search notices as block quotes with escaped caller text, and moves to mcp-ts-core 0.13.18 (MCP SDK 2.4; a 0.13.16 HTTP per-request memory leak fixed)."
|
|
3
|
+
breaking: false
|
|
4
|
+
security: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# 0.4.0 — 2026-10-28
|
|
8
|
+
|
|
9
|
+
## Added
|
|
10
|
+
|
|
11
|
+
- **`skill://openfoodfacts-guide/SKILL.md`** served over MCP through `createApp({ skills: 'skills' })`: allergy checks that never overclaim, choosing among a product's barcodes, tag-ID sources, grade ranges, free-from searches, and the shared search budget. `resources/list` gains the skill and the `skill://{+path}` template, and `initialize` advertises the `io.modelcontextprotocol/skills` extension; `tools/list` is unchanged. The skill also ships in the npm package, Docker image, plugin installs, and `.mcpb` bundle.
|
|
12
|
+
- **Root `plugin.json` and `mcp.json`**: the Agent Plugins 1.0.0 pair, alongside the existing `.claude-plugin/` and `.codex-plugin/` manifests.
|
|
13
|
+
|
|
14
|
+
## Changed
|
|
15
|
+
|
|
16
|
+
- **README** Getting started is shorter (hosted `claude mcp add`, local `npx`, one generic config), and a Skills section lists `openfoodfacts-guide`.
|
|
17
|
+
- **Maintenance** re-syncs framework skills (adds `add-skill`) and scripts, anchors every `.mcpbignore` path to the repo root, copies `skills/` in the Dockerfile, and merges the issue-template environment fields into one table.
|
|
18
|
+
|
|
19
|
+
## Fixed
|
|
20
|
+
|
|
21
|
+
- **`off_search_products` notices** ([#65](https://github.com/cyanheads/openfoodfacts-mcp-server/issues/65)): under mcp-ts-core 0.13.18, which renders a generic enrichment string as a code span, the zero-result, past-the-end, and all-omitted notices rendered in `content[]` as code spans. They now go through `ctx.enrich.notice()` and render as block quotes, like the taxonomy tool's.
|
|
22
|
+
- **Notices are Markdown-escaped where they render**: caller and upstream values echoed in `off_search_products` and `off_browse_taxonomy` notices (query, tag filters, taxonomy term, upstream failure cause) are escaped in the `content[]` block quote, so they can no longer reshape it; `structuredContent.notice` carries them as sent.
|
|
23
|
+
|
|
24
|
+
## Dependencies
|
|
25
|
+
|
|
26
|
+
- **`@cyanheads/mcp-ts-core`** ^0.13.16 → ^0.13.18: MCP SDK ^2.3.1 → ^2.4.0 and the HTTP transport no longer retaining ~71 KiB per request, a leak in 0.3.9's framework 0.13.16 (both 0.13.17); published skills served over MCP and `.mcpb` bundles that drop dev paths and build-only files (0.13.18).
|
|
27
|
+
- **`@biomejs/biome`** ^2.6.2 → ^2.6.3.
|
|
28
|
+
- **`ignore`** ^7.0.13 → ^7.0.14.
|
|
29
|
+
- **`tsc-alias`** ^1.9.8 → ^1.9.9.
|
|
30
|
+
- **`bunfig.toml`** `minimumReleaseAge` 3 days → 1 day.
|
package/dist/index.js
CHANGED
|
@@ -11,6 +11,7 @@ await createApp({
|
|
|
11
11
|
name: 'openfoodfacts-mcp-server',
|
|
12
12
|
title: 'openfoodfacts-mcp-server',
|
|
13
13
|
tools: allToolDefinitions,
|
|
14
|
+
skills: 'skills',
|
|
14
15
|
instructions: 'Query Open Food Facts, a free crowd-sourced database of 3M+ packaged foods: off_get_product looks up one product by barcode (4–40 digits), off_search_products finds products by text or tag filters, off_compare_products puts several side by side on nutrition, and off_browse_taxonomy resolves a human term to the canonical tag ID the other tools filter on — so start there when you have a category or label rather than a barcode. Every field is contributor-entered, so a missing one means "not yet recorded" rather than absent, and the computed Nutri-Score, NOVA, and Green-Score grades carry regional caveats. No API key is required; the data is ODbL 1.0, so cite Open Food Facts wherever you pass it on.',
|
|
15
16
|
sessionMode: 'stateless',
|
|
16
17
|
setup() {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAC7E,OAAO,EAAE,wBAAwB,EAAE,MAAM,mDAAmD,CAAC;AAC7F,OAAO,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;AAE9E,MAAM,SAAS,CAAC;IACd,IAAI,EAAE,0BAA0B;IAChC,KAAK,EAAE,0BAA0B;IACjC,KAAK,EAAE,kBAAkB;IACzB,YAAY,EACV,ksBAAksB;IACpsB,WAAW,EAAE,WAAW;IACxB,KAAK;QACH,wBAAwB,EAAE,CAAC;QAC3B,mBAAmB,EAAE,CAAC;IACxB,CAAC;CACF,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,yCAAyC,CAAC;AAC7E,OAAO,EAAE,wBAAwB,EAAE,MAAM,mDAAmD,CAAC;AAC7F,OAAO,EAAE,mBAAmB,EAAE,MAAM,yCAAyC,CAAC;AAE9E,MAAM,SAAS,CAAC;IACd,IAAI,EAAE,0BAA0B;IAChC,KAAK,EAAE,0BAA0B;IACjC,KAAK,EAAE,kBAAkB;IACzB,MAAM,EAAE,QAAQ;IAChB,YAAY,EACV,ksBAAksB;IACpsB,WAAW,EAAE,WAAW;IACxB,KAAK;QACH,wBAAwB,EAAE,CAAC;QAC3B,mBAAmB,EAAE,CAAC;IACxB,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browse-taxonomy.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/browse-taxonomy.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AAWjD,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"browse-taxonomy.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/browse-taxonomy.tool.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AAWjD,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;EAuKhC,CAAC"}
|
|
@@ -72,6 +72,11 @@ export const offBrowseTaxonomyTool = tool('off_browse_taxonomy', {
|
|
|
72
72
|
.optional()
|
|
73
73
|
.describe(`The limit that was applied — at most ${TAXONOMY_LIMIT_CAP}.`),
|
|
74
74
|
},
|
|
75
|
+
// The notice echoes the search term and an upstream failure cause, so it is escaped here at render
|
|
76
|
+
// time: structuredContent keeps those values as sent.
|
|
77
|
+
enrichmentTrailer: {
|
|
78
|
+
notice: { render: (v) => `> ${mdInline(String(v))}` },
|
|
79
|
+
},
|
|
75
80
|
async handler(input, ctx) {
|
|
76
81
|
const svc = getTaxonomyService();
|
|
77
82
|
const limit = Math.min(input.limit, TAXONOMY_LIMIT_CAP);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"browse-taxonomy.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/browse-taxonomy.tool.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"browse-taxonomy.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/browse-taxonomy.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search-products.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/search-products.tool.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AA6MjE,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"search-products.tool.d.ts","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/search-products.tool.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAQ,CAAC,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AA6MjE,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAq1BhC,CAAC"}
|
|
@@ -324,10 +324,15 @@ export const offSearchProductsTool = tool('off_search_products', {
|
|
|
324
324
|
shown: z.number().optional().describe('Number of products returned on this page.'),
|
|
325
325
|
cap: z.number().optional().describe('The page_size that was applied.'),
|
|
326
326
|
},
|
|
327
|
+
// These fields are authored prose, not values a caller copies into its next call, so the notice
|
|
328
|
+
// renders as a block quote and the rest as labelled sentences; the framework's default for a
|
|
329
|
+
// string field is a code span. The prose echoes caller and upstream values, so it is escaped here
|
|
330
|
+
// at render time: structuredContent keeps those values as sent.
|
|
327
331
|
enrichmentTrailer: {
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
332
|
+
notice: { render: (v) => `> ${mdInline(String(v))}` },
|
|
333
|
+
text_index_snapshot: { render: (v) => `**Index freshness:** ${mdInline(String(v))}` },
|
|
334
|
+
exclusion_coverage: { render: (v) => `**Exclusions:** ${mdInline(String(v))}` },
|
|
335
|
+
page_size_capped: { render: (v) => `**Page size:** ${mdInline(String(v))}` },
|
|
331
336
|
},
|
|
332
337
|
errors: [
|
|
333
338
|
{
|
|
@@ -606,7 +611,7 @@ export const offSearchProductsTool = tool('off_search_products', {
|
|
|
606
611
|
ctx.enrich.truncated({ shown: response.page_count, cap: pageSize, guidance: notice });
|
|
607
612
|
}
|
|
608
613
|
else {
|
|
609
|
-
ctx.enrich(
|
|
614
|
+
ctx.enrich.notice(notice);
|
|
610
615
|
}
|
|
611
616
|
}
|
|
612
617
|
else if (response.products.length === 0 && response.count > 0) {
|
|
@@ -616,10 +621,8 @@ export const offSearchProductsTool = tool('off_search_products', {
|
|
|
616
621
|
const bound = lastPage === undefined
|
|
617
622
|
? `The backend stopped counting at ${response.count} matches, so there is no exact last page — request an earlier page.`
|
|
618
623
|
: `Request page ${lastPage} or lower to reach them.`;
|
|
619
|
-
ctx.enrich({
|
|
620
|
-
|
|
621
|
-
`products exist, but no page this deep holds any. ${bound}`,
|
|
622
|
-
});
|
|
624
|
+
ctx.enrich.notice(`Page ${response.page} is past the end of this result set — ${response.count} matching ` +
|
|
625
|
+
`products exist, but no page this deep holds any. ${bound}`);
|
|
623
626
|
}
|
|
624
627
|
else if (response.products.length === 0) {
|
|
625
628
|
// Echoed as given but trimmed, and only when sent: a blank value never reaches a backend.
|
|
@@ -646,9 +649,7 @@ export const offSearchProductsTool = tool('off_search_products', {
|
|
|
646
649
|
}
|
|
647
650
|
const echo = `No products found for ${filterParts.join(', ')}.`;
|
|
648
651
|
if (!servedByTextBackend) {
|
|
649
|
-
ctx.enrich({
|
|
650
|
-
notice: `${echo} Try broader terms, check tag IDs via off_browse_taxonomy, or remove some filters.`,
|
|
651
|
-
});
|
|
652
|
+
ctx.enrich.notice(`${echo} Try broader terms, check tag IDs via off_browse_taxonomy, or remove some filters.`);
|
|
652
653
|
}
|
|
653
654
|
else {
|
|
654
655
|
// A text-path zero has three possible causes, and the caller needs the ones that apply to
|
|
@@ -673,7 +674,7 @@ export const offSearchProductsTool = tool('off_search_products', {
|
|
|
673
674
|
causes.push(`Tag values are matched exactly on this path${unconfirmed.length > 0 ? `: ${unconfirmed.join('; ')}` : ''}. Check tag IDs via off_browse_taxonomy.`);
|
|
674
675
|
}
|
|
675
676
|
causes.push(`The text index may not hold recently contributed products, so an empty result here does not settle whether a matching product has been contributed: ${liveRoute.advice}, or call off_get_product when the barcode is known.`);
|
|
676
|
-
ctx.enrich(
|
|
677
|
+
ctx.enrich.notice(`${echo} ${causes.join(' ')}`);
|
|
677
678
|
}
|
|
678
679
|
}
|
|
679
680
|
else if (moreBeyond) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search-products.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/search-products.tool.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"search-products.tool.js","sourceRoot":"","sources":["../../../../src/mcp-server/tools/definitions/search-products.tool.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@cyanheads/openfoodfacts-mcp-server",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"mcpName": "io.github.cyanheads/openfoodfacts-mcp-server",
|
|
5
5
|
"description": "Look up food products by barcode, search by keyword, tag, allergen, or nutrition filter, compare products side-by-side, and browse the canonical tag vocabulary via MCP. STDIO or Streamable HTTP.",
|
|
6
6
|
"type": "module",
|
|
@@ -18,7 +18,8 @@
|
|
|
18
18
|
"CLAUDE.md",
|
|
19
19
|
"AGENTS.md",
|
|
20
20
|
"Dockerfile",
|
|
21
|
-
"server.json"
|
|
21
|
+
"server.json",
|
|
22
|
+
"skills/"
|
|
22
23
|
],
|
|
23
24
|
"scripts": {
|
|
24
25
|
"build": "bun run scripts/build.ts",
|
|
@@ -89,17 +90,17 @@
|
|
|
89
90
|
"access": "public"
|
|
90
91
|
},
|
|
91
92
|
"dependencies": {
|
|
92
|
-
"@cyanheads/mcp-ts-core": "^0.13.
|
|
93
|
+
"@cyanheads/mcp-ts-core": "^0.13.18",
|
|
93
94
|
"pino-pretty": "^13.2.0",
|
|
94
95
|
"zod": "^4.6.7"
|
|
95
96
|
},
|
|
96
97
|
"devDependencies": {
|
|
97
|
-
"@biomejs/biome": "^2.6.
|
|
98
|
+
"@biomejs/biome": "^2.6.3",
|
|
98
99
|
"@socketsecurity/bun-security-scanner": "^1.1.3",
|
|
99
100
|
"@types/node": "^26.6.5",
|
|
100
101
|
"depcheck": "^1.4.7",
|
|
101
|
-
"ignore": "^7.0.
|
|
102
|
-
"tsc-alias": "^1.9.
|
|
102
|
+
"ignore": "^7.0.14",
|
|
103
|
+
"tsc-alias": "^1.9.9",
|
|
103
104
|
"typescript": "^7.0.2",
|
|
104
105
|
"vitest": "^5.0.5"
|
|
105
106
|
}
|
package/server.json
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
"url": "https://github.com/cyanheads/openfoodfacts-mcp-server",
|
|
7
7
|
"source": "github"
|
|
8
8
|
},
|
|
9
|
-
"version": "0.
|
|
9
|
+
"version": "0.4.0",
|
|
10
10
|
"remotes": [
|
|
11
11
|
{
|
|
12
12
|
"type": "streamable-http",
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"registryBaseUrl": "https://registry.npmjs.org",
|
|
20
20
|
"identifier": "@cyanheads/openfoodfacts-mcp-server",
|
|
21
21
|
"runtimeHint": "npx",
|
|
22
|
-
"version": "0.
|
|
22
|
+
"version": "0.4.0",
|
|
23
23
|
"environmentVariables": [
|
|
24
24
|
{
|
|
25
25
|
"name": "OFF_BASE_URL",
|
|
@@ -66,7 +66,7 @@
|
|
|
66
66
|
"registryBaseUrl": "https://registry.npmjs.org",
|
|
67
67
|
"identifier": "@cyanheads/openfoodfacts-mcp-server",
|
|
68
68
|
"runtimeHint": "npx",
|
|
69
|
-
"version": "0.
|
|
69
|
+
"version": "0.4.0",
|
|
70
70
|
"environmentVariables": [
|
|
71
71
|
{
|
|
72
72
|
"name": "MCP_TRANSPORT_TYPE",
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: openfoodfacts-guide
|
|
3
|
+
description: Judgment for the off_* tools (Open Food Facts) — allergy checks that never overclaim, choosing among a product's many barcodes, where tag IDs come from, grade ranges, free-from searches, and the search budget. Use when answering allergy, diet, ingredient, additive, Nutri-Score, NOVA, or product-comparison questions about packaged foods with off_get_product, off_search_products, off_compare_products, or off_browse_taxonomy.
|
|
4
|
+
license: Apache-2.0
|
|
5
|
+
metadata:
|
|
6
|
+
author: cyanheads
|
|
7
|
+
version: "1.0"
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Scope
|
|
11
|
+
|
|
12
|
+
Packaged, barcoded foods as Open Food Facts contributors recorded them: label text, declared allergens and traces, additives, Open Food Facts' computed grades, and nutrition per 100 g (per 100 ml for liquids) and per serving. It is not a verdict on whether a food is safe for a particular person, and it holds no recalls. Reference composition for generic, unbranded foods belongs to a food-composition database such as USDA FoodData Central.
|
|
13
|
+
|
|
14
|
+
## Identifiers
|
|
15
|
+
|
|
16
|
+
| Identifier | Where it comes from |
|
|
17
|
+
|:--|:--|
|
|
18
|
+
| Barcode | The user (a scan or the pack), or the rows of off_search_products. One product has many barcodes — sizes, regional editions, reformulations — and each is a separate record with its own completeness and grades. |
|
|
19
|
+
| Tag ID (`en:organic`, `en:nuts`) | off_browse_taxonomy, or the tag arrays on a product record. The same ID can mean different things in different facets: the category `en:nuts` holds peanut products, while the allergen `en:nuts` means tree nuts. |
|
|
20
|
+
| Category tags | A record carries its category's ancestors too (a pistachio row lists `en:snacks`, `en:salty-snacks`, `en:nuts`, `en:pistachios`), so a broad category filter also matches products filed under its subcategories. |
|
|
21
|
+
| Off-taxonomy entries | A product's tag arrays can hold contributor entries the taxonomy never canonicalized: a non-`en:` prefix or display text with capitals, spaces, or accents (`fr:Goûter`, `en:Pâtes à tartiner`). Don't reuse one as a filter value; resolve the concept with off_browse_taxonomy first. |
|
|
22
|
+
|
|
23
|
+
## Gates
|
|
24
|
+
|
|
25
|
+
1. **Allergy questions: never answer "safe" or "free of X".** Report what the record says and how far it goes. Read all three sources: `ingredients_text` (in the label's own language, often with allergens emphasized in capitals or brackets), `allergens_tags`, and `traces_tags`. An empty `traces_tags` means no trace data was entered, not that the label carries no warning. When the three disagree, say the record is unreliable: a record can carry a truncated ingredients text beside allergen tags that text cannot support. End by pointing the user to the physical label.
|
|
26
|
+
2. **Nut allergies need two tags.** `en:nuts` means tree nuts; peanuts are the separate `en:peanuts`. Check both on the record, and pass both to exclude_allergens or exclude_traces.
|
|
27
|
+
3. **Free-from searches start from a positive claim.** An exclusion alone also passes every product with no allergen data entered, so select first on something the record asserts: a label (`en:no-gluten`, `en:vegan`) or a free-from category (`en:gluten-free-pasta`). Add the exclusion on top, then confirm shortlisted barcodes with off_get_product. For vegan, the ingredients-analysis verdict `en:vegan` is Open Food Facts' computation from the parsed ingredients, while the label `en:vegan` is a claim printed on the pack. They are different evidence, so say which one you used.
|
|
28
|
+
4. **Grade ranges take one call per grade.** nutrition_grade and nova_group each take a single value. For "Nutri-Score B or better", search once with `a` and once with `b`, then merge the results. A product with no grade drops out of both searches.
|
|
29
|
+
5. **A product named without a barcode: pick a barcode deliberately.** Don't take the first search row on faith. Records for one product can carry different Nutri-Score and NOVA grades even when their nutrition is identical, when one record's ingredient list or other entered data is incomplete. Prefer the user's own barcode. Otherwise sort by unique_scans_n, favor high completeness, and name the barcode the answer came from.
|
|
30
|
+
6. **Grades are Open Food Facts' computation from the record**, not the grade printed on the pack. When a user quotes a different grade, the record's data is the first suspect: check its `completeness`, `data_quality_tags`, and ingredient list.
|
|
31
|
+
7. **Spend searches one at a time.** The search budget is about 10 upstream requests a minute on the default configuration. The server process holds it, so every caller of a shared deployment draws from it, and each retry of a failing request spends its own slot. Never fan out parallel searches; when the budget runs out, the error's `data.retryAfter` gives the wait. Product lookups draw on a separate budget, but off_compare_products spends one lookup from it per barcode, the same as off_get_product.
|
|
32
|
+
|
|
33
|
+
## Workflows
|
|
34
|
+
|
|
35
|
+
**Allergy or diet check on one product.** Call off_get_product, with `fields` narrowed to the ingredients, allergen, trace, and analysis fields when nutrition doesn't matter. Apply gates 1 and 2. If the user named a product rather than a barcode, apply gate 5 first.
|
|
36
|
+
|
|
37
|
+
**Find products matching a diet and a nutrition target.** Resolve each human term (category, label, allergen, country) with off_browse_taxonomy. Express the diet as a positive claim (gate 3), the grade as one search per grade (gate 4), and the nutrition target as nutrient_filters. Nutrient filters move the search to the lagging text index, and each row then carries the index values the filters were checked against. Confirm the shortlist with off_get_product before presenting it.
|
|
38
|
+
|
|
39
|
+
**Compare products.** off_compare_products returns nutrition and grades only: no ingredients, allergens, or additives. For additives or allergens, follow up per barcode with off_get_product, narrowing `fields` to `additives_tags`, `allergens_tags`, and `ingredients_text`. Mind the shared product budget when the list is long (gate 7). Don't count additives by array length: `additives_tags` can list a parent and a specific form of the same additive (`en:e322` lecithins and `en:e322i` soya lecithin on one record). off_browse_taxonomy with facet `additives` and the E-number gives the additive's name.
|
|
40
|
+
|
|
41
|
+
**A tag-only search fails with upstream_error.** Searches by tag filters alone and searches carrying a query read separate backends, so one can fail while the other answers. Add a query word the product's name or category would carry (`pasta` with `categories_tag` `en:pastas`) to reroute the same filters to the text index. This doesn't work with additives_tag, and the text index lags the live database, so say so when you report results that came through it.
|