@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 CHANGED
@@ -1,10 +1,10 @@
1
1
  # Developer Protocol
2
2
 
3
3
  **Server:** openfoodfacts-mcp-server
4
- **Version:** 0.3.9
5
- **Framework:** [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) `^0.13.16`
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.3.1
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
- Skills are modular instructions in `framework-skills/` at the project root. 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. The 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 these development skills to every agent that installs it. Keep `skills/` free for skills meant for those agents.
242
+ Two skill trees live at the project root, written for different readers:
243
243
 
244
- **Agent skill directory:** Copy 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.
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 two classes of `node_modules/**` content that root-anchored `.mcpbignore` patterns cannot reach: dependency-shipped agent docs (`framework-skills/`, `skills/`, `.claude/`, `.agents/`, `SKILL.md`) and platform-specific native bindings, which would otherwise lock the bundle to the platform it was packed on. 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.
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.3.9
5
- **Framework:** [@cyanheads/mcp-ts-core](https://www.npmjs.com/package/@cyanheads/mcp-ts-core) `^0.13.16`
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.3.1
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
- Skills are modular instructions in `framework-skills/` at the project root. 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. The 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 these development skills to every agent that installs it. Keep `skills/` free for skills meant for those agents.
242
+ Two skill trees live at the project root, written for different readers:
243
243
 
244
- **Agent skill directory:** Copy 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.
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 two classes of `node_modules/**` content that root-anchored `.mcpbignore` patterns cannot reach: dependency-shipped agent docs (`framework-skills/`, `skills/`, `.claude/`, `.agents/`, `SKILL.md`) and platform-specific native bindings, which would otherwise lock the bundle to the platform it was packed on. 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.
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
- [![Version](https://img.shields.io/badge/Version-0.3.9-blue.svg?style=flat-square)](./CHANGELOG.md) [![License](https://img.shields.io/badge/License-Apache%202.0-orange.svg?style=flat-square)](./LICENSE) [![Docker](https://img.shields.io/badge/Docker-ghcr.io-2496ED?style=flat-square&logo=docker&logoColor=white)](https://github.com/users/cyanheads/packages/container/package/openfoodfacts-mcp-server) [![MCP SDK](https://img.shields.io/badge/MCP%20SDK-^2.3.1-green.svg?style=flat-square)](https://modelcontextprotocol.io/) [![npm](https://img.shields.io/npm/v/@cyanheads/openfoodfacts-mcp-server?style=flat-square&logo=npm&logoColor=white)](https://www.npmjs.com/package/@cyanheads/openfoodfacts-mcp-server) [![TypeScript](https://img.shields.io/badge/TypeScript-^7.0.2-3178C6.svg?style=flat-square)](https://www.typescriptlang.org/) [![Bun](https://img.shields.io/badge/Bun-v1.4.4-blueviolet.svg?style=flat-square)](https://bun.sh/)
10
+ [![Version](https://img.shields.io/badge/Version-0.4.0-blue.svg?style=flat-square)](./CHANGELOG.md) [![License](https://img.shields.io/badge/License-Apache%202.0-orange.svg?style=flat-square)](./LICENSE) [![Docker](https://img.shields.io/badge/Docker-ghcr.io-2496ED?style=flat-square&logo=docker&logoColor=white)](https://github.com/users/cyanheads/packages/container/package/openfoodfacts-mcp-server) [![MCP SDK](https://img.shields.io/badge/MCP%20SDK-^2.4.0-green.svg?style=flat-square)](https://modelcontextprotocol.io/) [![npm](https://img.shields.io/npm/v/@cyanheads/openfoodfacts-mcp-server?style=flat-square&logo=npm&logoColor=white)](https://www.npmjs.com/package/@cyanheads/openfoodfacts-mcp-server) [![TypeScript](https://img.shields.io/badge/TypeScript-^7.0.2-3178C6.svg?style=flat-square)](https://www.typescriptlang.org/) [![Bun](https://img.shields.io/badge/Bun-v1.4.4-blueviolet.svg?style=flat-square)](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
- ### Public Hosted Instance
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
- For Cline (`cline_mcp_settings.json`):
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
- No API key is required. Add the following to your MCP client configuration file.
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
- Or with npx (no Bun required):
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@latest"],
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
- Or with Docker:
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 build -t openfoodfacts-mcp-server .
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 Dockerfile defaults to HTTP transport, stateless session mode, and logs to `/var/log/openfoodfacts-mcp-server`. OpenTelemetry peer dependencies are installed by default — build with `--build-arg OTEL_ENABLED=false` to omit them.
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;;;;;;;;;;;;;;;;;;;;;;;;EAiKhC,CAAC"}
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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAi1BhC,CAAC"}
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
- text_index_snapshot: { label: 'Index freshness' },
329
- exclusion_coverage: { label: 'Exclusions' },
330
- page_size_capped: { label: 'Page size' },
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({ notice });
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
- notice: `Page ${response.page} is past the end of this result set — ${response.count} matching ` +
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({ notice: `${echo} ${causes.join(' ')}` });
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.9",
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.16",
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.2",
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.13",
102
- "tsc-alias": "^1.9.8",
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.3.9",
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.3.9",
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.3.9",
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.