Pod

Available as Markdown and JSON. Pod is also available over MCP.

Reported issues for openfoodfacts-mcp-server

Pod holds 17 of 17 GitHub reports that passed its relevance review. This can include external user reports, maintainer-confirmed bugs, and concrete feature gaps. Treat them as evidence to inspect, not a count of distinct defects.

Back to openfoodfacts-mcp-server.

Most discussed

bug(off_get_product): field subsets drop dependent fields and misreport them

Server version

0.3.3

mcp-ts-core version

^0.13.3

Runtime

Bun

Runtime version

Bun 1.4.0

Transport

HTTP (Streamable HTTP)

Description

off_get_product's fields subset is forwarded to Open Food Facts verbatim, so a field the response needs to be readable is never fetched when the caller did not name it. The text response then attributes the gap to Open Food Facts, which has the data.

Three cases, all from the same cause:

  1. fields: ["nutriments"] returns…

Read the thread · 2026-08-11 · closed · 3 comments

bug(off_search_products): text queries match only English name fields, missing products named in other languages

Server version

0.3.5

mcp-ts-core version

0.13.6

Runtime

Bun

Runtime version

Bun 1.4.0

Transport

HTTP (Streamable HTTP)

Description

The text search sends no langs, so search-a-licious falls back to ["en"] and matches query only against the English subfields of product and generic names, categories, and labels, plus brands. A product named only in French, German, Russian, or another language is…

Read the thread · 2026-09-23 · closed · 1 comment

bug(barcode): off_get_product and off_compare_products reject 4–7 and 15–40 digit codes Open Food Facts serves

Server version

0.3.5

mcp-ts-core version

0.13.6

Runtime

Bun

Runtime version

Bun 1.4.0

Transport

HTTP (Streamable HTTP)

Description

off_get_product and off_compare_products validate barcodes against ^\d{8,14}$, so codes Open Food Facts serves are rejected before any request is sent. off_search_products returns those codes as barcode and tells callers to pass them to off_get_product. [Product…

Read the thread · 2026-09-23 · closed · 1 comment

bug(off_search_products): tag-only searches refuse every page past 10, but the tool sends them and calls the limit unpredictable

Server version

0.3.4

mcp-ts-core version

0.13.6

Runtime

Bun

Runtime version

Bun 1.4.0

Transport

HTTP (Streamable HTTP)

Description

Tag-only searches (no query, no nutrient_filters) go to /api/v2/search, which refuses every page past 10 for clients that are not logged in. Product Opener answers page > 10 from an unidentified user with HTTP 401 and a rendered…

Read the thread · 2026-09-22 · closed · 1 comment

feat(off_search_products): allergen/trace exclusion, vegan-verdict, and multi-label filters

Use case

Allergy and diet shoppers ask for "nut-free chocolate sold in the US" or "vegan protein bars". off_search_products can only select products that declare one allergen. It cannot exclude an allergen or a "may contain" trace, filter on the vegan/vegetarian/palm-oil verdicts off_get_product returns, or require two labels. The workaround is screening every candidate with off_get_product, about one page per minute at the 15/min product budget.

Related: #32, #39

Proposed…

Read the thread · 2026-09-22 · closed · 1 comment

bug(off_get_product): parsed ingredients drop nested sub-ingredients

Server version

0.3.4

mcp-ts-core version

0.13.3

Runtime

Bun

Runtime version

Bun 1.4.0

Transport

HTTP (Streamable HTTP)

Description

off_get_product keeps only the top level of the parsed ingredients tree. Open Food Facts nests sub-ingredients in ingredients[].ingredients, but RawIngredient does not declare that array and buildProductOutput never reads it. Nested entries are missing from structuredContent and content[], with no sign the list was…

Read the thread · 2026-09-22 · closed · 1 comment

bug(off_search_products): text path matches tag values literally, so a value the tag path accepts returns an exact zero

Server version

0.3.4

mcp-ts-core version

0.13.3

Runtime

Bun

Runtime version

Bun 1.4.0

Transport

HTTP (Streamable HTTP)

Description

/api/v2/search canonicalizes tag values: case, synonyms, plurals, and a missing language prefix. The text backend's *_tags fields are exact-match keywords, and buildTextSearchQuery quotes the value verbatim. So a value that works on a tag-only search returns an exact total: 0 once query or nutrient_filters is added. The…

Read the thread · 2026-09-22 · closed · 1 comment

bug(off_search_products): multi-word query terms are OR-ed, so total counts products matching any word

Server version

0.3.4

mcp-ts-core version

0.13.3

Runtime

Bun

Runtime version

Bun 1.4.0

Transport

HTTP (Streamable HTTP)

Description

The text backend ORs the words of a multi-word query. total counts products matching any word, and a word that matches nothing is dropped silently, which contradicts "results match the query text". The deployed search-a-licious (the v1.4.0 query path) sends bare words to…

Read the thread · 2026-09-22 · closed · 1 comment

Most recent

bug(openfoodfacts-service): an HTML-bodied 4xx is blamed on load shedding, and a 501 is retried as transient

Server version

0.3.4

mcp-ts-core version

0.13.3

Runtime

Bun

Runtime version

Bun 1.4.0

Transport

HTTP (Streamable HTTP)

Description

Upstream-failure classification lets the retry flag and the message disagree. An HTML-bodied 401 is correctly non-retryable: Product Opener answers anonymous clients 401 with a rendered error page for every search page past 10. The…

Read the thread · 2026-09-18 · closed · 1 comment

bug(off_search_products): a hit with no code yields barcode "", hidden by a double type cast

Server version

0.3.3

mcp-ts-core version

0.13.3

Runtime

Bun

Runtime version

Bun 1.4.0

Transport

stdio

Description

RawProduct declares no code, so the barcode moves through two unchecked casts: ...({ code: hit.code } as unknown as Partial<RawProduct>) in openfoodfacts-service.ts, and ((p as unknown as Record<string, unknown>).code as string) ?? '' in search-products.tool.ts. A row without code becomes barcode: "", which off_get_product…

Read the thread · 2026-09-17 · closed · 1 comment

feat(off_search_products): honor sort_by on text searches

Use case

"The most-scanned hummus", "the newest oat drinks matching barista" — ordering questions that also need free text cannot be answered. off_search_products accepts sort_by, but it is dropped whenever query is set: the handler forwards it to the service and the text-search request is built without it. The schema tells callers text searches are relevance-ranked and ignore the option, and nothing in the response marks the sort as unapplied.

The text backend does sort.…

Read the thread · 2026-09-17 · closed · 1 comment

bug(off_search_products): text searches read an index frozen at December 2024

Server version

0.3.2

mcp-ts-core version

^0.12.3

Runtime

Bun

Runtime version

Bun 1.4.0

Transport

HTTP (Streamable HTTP)

Description

Every off_search_products call that carries query is served by search.openfoodfacts.org, whose index stops in December 2024. Tag-only calls go to /api/v2/search, which is current. So the same filters answer differently depending on whether free text is present, products contributed since the cutoff are missing from every…

Read the thread · 2026-09-17 · closed · 1 comment

bug(off_browse_taxonomy): embedded tag IDs are not canonical, so resolved filters match nothing

Server version

0.3.2

mcp-ts-core version

^0.12.3

Runtime

Bun

Runtime version

Bun 1.4.0

Transport

HTTP (Streamable HTTP)

Description

off_browse_taxonomy merges its embedded vocabulary ahead of live suggestions, and 52 of the embedded tag IDs are not canonical keys in the published Open Food Facts taxonomies. The tool tells callers to pass the returned id to off_search_products unchanged. When they do,…

Read the thread · 2026-09-17 · closed · 1 comment

bug(off_compare_products): do not label all-failed batches as not found

Server version

0.3.3

mcp-ts-core version

^0.13.3

Runtime

Bun

Runtime version

Bun 1.4.0

Transport

HTTP (Streamable HTTP)

Description

When no barcode in an off_compare_products batch resolves to a product, format() appends No products found. Try off_get_product on individual barcodes to verify. — one line covering three different settlements.

After an all-failed batch the text first says the barcodes were not checked, then says no products were found, and…

Read the thread · 2026-08-11 · closed · 1 comment

bug(format): escape crowd-sourced text for Markdown contexts

Server version

0.3.3

mcp-ts-core version

^0.13.3

Runtime

Bun

Runtime version

Bun 1.4.0

Transport

HTTP (Streamable HTTP)

Description

Every format() interpolates crowd-sourced Open Food Facts text straight into Markdown — headings, bold-label lines, bullets, an inline code span, a fixed code fence, and two tables. A value carrying Markdown syntax changes the rendered structure rather than being displayed, so text the server presents as data can present itself…

Read the thread · 2026-08-11 · closed · 1 comment

bug(error-contracts): remove raw HTML from structured errors

Server version

0.3.3

mcp-ts-core version

^0.13.3

Runtime

Bun

Runtime version

Bun 1.4.0

Transport

HTTP (Streamable HTTP)

Description

toContractError() builds the public failure by spreading the framework fetch error's whole data object (src/services/openfoodfacts/openfoodfacts-service.ts:197). That object carries the captured upstream response body twice — as body and as its legacy alias responseBody — so when Open Food Facts answers with a rendered…

Read the thread · 2026-08-11 · closed · 1 comment

bug(off_search_products): distinguish exhausted pages from zero matches

Server version

0.3.2

mcp-ts-core version

^0.12.3

Runtime

Bun

Runtime version

Bun 1.4.0

Transport

HTTP (Streamable HTTP)

Description

off_search_products treats every empty page as a zero-match search. The handler's empty branch and format() both key on products.length === 0, so a page past the end of a large result set is reported as "no products found" with broadening guidance, next to a positive total in the same response.

Both backends reach that…

Read the thread · 2026-08-11 · closed · 1 comment

The remaining reports are on the project's issue tracker.