@cyanheads/openfoodfacts-mcp-server 0.1.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.
Files changed (49) hide show
  1. package/AGENTS.md +335 -0
  2. package/CLAUDE.md +335 -0
  3. package/Dockerfile +99 -0
  4. package/LICENSE +201 -0
  5. package/README.md +290 -0
  6. package/changelog/0.1.x/0.1.0.md +15 -0
  7. package/changelog/template.md +127 -0
  8. package/dist/config/server-config.d.ts +15 -0
  9. package/dist/config/server-config.d.ts.map +1 -0
  10. package/dist/config/server-config.js +35 -0
  11. package/dist/config/server-config.js.map +1 -0
  12. package/dist/index.d.ts +7 -0
  13. package/dist/index.d.ts.map +1 -0
  14. package/dist/index.js +23 -0
  15. package/dist/index.js.map +1 -0
  16. package/dist/mcp-server/tools/definitions/browse-taxonomy.tool.d.ts +27 -0
  17. package/dist/mcp-server/tools/definitions/browse-taxonomy.tool.d.ts.map +1 -0
  18. package/dist/mcp-server/tools/definitions/browse-taxonomy.tool.js +91 -0
  19. package/dist/mcp-server/tools/definitions/browse-taxonomy.tool.js.map +1 -0
  20. package/dist/mcp-server/tools/definitions/compare-products.tool.d.ts +36 -0
  21. package/dist/mcp-server/tools/definitions/compare-products.tool.d.ts.map +1 -0
  22. package/dist/mcp-server/tools/definitions/compare-products.tool.js +228 -0
  23. package/dist/mcp-server/tools/definitions/compare-products.tool.js.map +1 -0
  24. package/dist/mcp-server/tools/definitions/get-product.tool.d.ts +83 -0
  25. package/dist/mcp-server/tools/definitions/get-product.tool.d.ts.map +1 -0
  26. package/dist/mcp-server/tools/definitions/get-product.tool.js +420 -0
  27. package/dist/mcp-server/tools/definitions/get-product.tool.js.map +1 -0
  28. package/dist/mcp-server/tools/definitions/index.d.ts +175 -0
  29. package/dist/mcp-server/tools/definitions/index.d.ts.map +1 -0
  30. package/dist/mcp-server/tools/definitions/index.js +15 -0
  31. package/dist/mcp-server/tools/definitions/index.js.map +1 -0
  32. package/dist/mcp-server/tools/definitions/search-products.tool.d.ts +54 -0
  33. package/dist/mcp-server/tools/definitions/search-products.tool.d.ts.map +1 -0
  34. package/dist/mcp-server/tools/definitions/search-products.tool.js +219 -0
  35. package/dist/mcp-server/tools/definitions/search-products.tool.js.map +1 -0
  36. package/dist/services/openfoodfacts/openfoodfacts-service.d.ts +54 -0
  37. package/dist/services/openfoodfacts/openfoodfacts-service.d.ts.map +1 -0
  38. package/dist/services/openfoodfacts/openfoodfacts-service.js +308 -0
  39. package/dist/services/openfoodfacts/openfoodfacts-service.js.map +1 -0
  40. package/dist/services/openfoodfacts/types.d.ts +89 -0
  41. package/dist/services/openfoodfacts/types.d.ts.map +1 -0
  42. package/dist/services/openfoodfacts/types.js +7 -0
  43. package/dist/services/openfoodfacts/types.js.map +1 -0
  44. package/dist/services/taxonomy/taxonomy-service.d.ts +24 -0
  45. package/dist/services/taxonomy/taxonomy-service.d.ts.map +1 -0
  46. package/dist/services/taxonomy/taxonomy-service.js +271 -0
  47. package/dist/services/taxonomy/taxonomy-service.js.map +1 -0
  48. package/package.json +102 -0
  49. package/server.json +141 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openfoodfacts-service.js","sourceRoot":"","sources":["../../../src/services/openfoodfacts/openfoodfacts-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * @fileoverview Raw API response types for the Open Food Facts API v2.
3
+ * All fields are optional — OFF is crowd-sourced and real payloads are sparse.
4
+ * @module services/openfoodfacts/types
5
+ */
6
+ /** Raw nutriments map from the OFF API — flat key-value with hyphenated keys and suffix variants. */
7
+ export type RawNutriments = Record<string, number | string | undefined>;
8
+ /** Parsed ingredient entry from the OFF API. */
9
+ export type RawIngredient = {
10
+ id?: string;
11
+ text?: string;
12
+ percent_estimate?: number;
13
+ vegan?: string;
14
+ vegetarian?: string;
15
+ };
16
+ /** Raw product object from the OFF API. Only documents the fields we actually use. */
17
+ export type RawProduct = {
18
+ product_name?: string;
19
+ brands?: string;
20
+ quantity?: string;
21
+ ingredients_text?: string;
22
+ ingredients?: RawIngredient[];
23
+ allergens_tags?: string[];
24
+ additives_tags?: string[];
25
+ nutriscore_grade?: string;
26
+ nova_group?: number;
27
+ ecoscore_grade?: string;
28
+ nutriments?: RawNutriments;
29
+ categories_tags?: string[];
30
+ labels_tags?: string[];
31
+ packaging_tags?: string[];
32
+ origins_tags?: string[];
33
+ image_url?: string;
34
+ completeness?: number;
35
+ data_quality_tags?: string[];
36
+ };
37
+ /** Response envelope from GET /api/v2/product/{barcode}.json */
38
+ export type RawProductResponse = {
39
+ code?: string;
40
+ status: number;
41
+ status_verbose?: string;
42
+ product?: RawProduct;
43
+ };
44
+ /** Response envelope from GET /api/v2/search */
45
+ export type RawSearchResponse = {
46
+ count?: number;
47
+ page?: number;
48
+ page_count?: number;
49
+ page_size?: number;
50
+ skip?: number;
51
+ products?: RawProduct[];
52
+ };
53
+ /**
54
+ * Response envelope from GET https://search.openfoodfacts.org/search
55
+ * Used for text-based queries — the /api/v2/search endpoint silently ignores the `search_terms`
56
+ * parameter and returns all products unfiltered.
57
+ * Note: `page_count` here is TOTAL PAGES, not products on the page (differs from /api/v2/search).
58
+ */
59
+ export type RawTextSearchResponse = {
60
+ count?: number;
61
+ page?: number;
62
+ page_size?: number;
63
+ /** Total number of pages (not products on this page — differs from /api/v2/search). */
64
+ page_count?: number;
65
+ hits?: RawTextSearchHit[];
66
+ };
67
+ /** A product hit from the search.openfoodfacts.org endpoint. */
68
+ export type RawTextSearchHit = {
69
+ code?: string;
70
+ product_name?: string;
71
+ /** brands is an array here, unlike the /api/v2 string field. */
72
+ brands?: string | string[];
73
+ nutriscore_grade?: string;
74
+ nova_group?: number;
75
+ categories_tags?: string[];
76
+ };
77
+ /** Search parameters for the OFF /api/v2/search endpoint. */
78
+ export type SearchParams = {
79
+ query?: string;
80
+ categories_tag?: string;
81
+ brands_tag?: string;
82
+ labels_tag?: string;
83
+ nutrition_grade?: string;
84
+ nova_group?: string;
85
+ countries_tag?: string;
86
+ page?: number;
87
+ page_size?: number;
88
+ };
89
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/services/openfoodfacts/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * @fileoverview Raw API response types for the Open Food Facts API v2.
3
+ * All fields are optional — OFF is crowd-sourced and real payloads are sparse.
4
+ * @module services/openfoodfacts/types
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/services/openfoodfacts/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * @fileoverview Embedded taxonomy service for Open Food Facts tag vocabularies.
3
+ * Returns curated tag IDs and display names for facets used in search filters.
4
+ * No network calls — the OFF taxonomy endpoint returns 503 for anonymous bots.
5
+ * @module services/taxonomy/taxonomy-service
6
+ */
7
+ export type TaxonomyEntry = {
8
+ id: string;
9
+ name: string;
10
+ products?: number;
11
+ };
12
+ export type Facet = 'categories' | 'labels' | 'allergens' | 'additives' | 'countries' | 'nova_groups' | 'nutrition_grades';
13
+ export type TaxonomySearchResult = {
14
+ facet: string;
15
+ tags: TaxonomyEntry[];
16
+ total_in_facet: number;
17
+ };
18
+ export declare class TaxonomyService {
19
+ /** Return tags for a given facet, optionally filtered by a substring search term. */
20
+ search(facet: Facet, search: string | undefined, limit: number): TaxonomySearchResult;
21
+ }
22
+ export declare function initTaxonomyService(): void;
23
+ export declare function getTaxonomyService(): TaxonomyService;
24
+ //# sourceMappingURL=taxonomy-service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"taxonomy-service.d.ts","sourceRoot":"","sources":["../../../src/services/taxonomy/taxonomy-service.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,MAAM,aAAa,GAAG;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,KAAK,GACb,YAAY,GACZ,QAAQ,GACR,WAAW,GACX,WAAW,GACX,WAAW,GACX,aAAa,GACb,kBAAkB,CAAC;AA4PvB,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,aAAa,EAAE,CAAC;IACtB,cAAc,EAAE,MAAM,CAAC;CACxB,CAAC;AAEF,qBAAa,eAAe;IAC1B,qFAAqF;IACrF,MAAM,CAAC,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAG,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,oBAAoB;CAiBtF;AAMD,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C;AAED,wBAAgB,kBAAkB,IAAI,eAAe,CAKpD"}
@@ -0,0 +1,271 @@
1
+ /**
2
+ * @fileoverview Embedded taxonomy service for Open Food Facts tag vocabularies.
3
+ * Returns curated tag IDs and display names for facets used in search filters.
4
+ * No network calls — the OFF taxonomy endpoint returns 503 for anonymous bots.
5
+ * @module services/taxonomy/taxonomy-service
6
+ */
7
+ /* -------------------------------------------------------------------------- */
8
+ /* Embedded vocabulary */
9
+ /* -------------------------------------------------------------------------- */
10
+ const TAXONOMY = {
11
+ categories: [
12
+ { id: 'en:beverages', name: 'Beverages' },
13
+ { id: 'en:breakfast-cereals', name: 'Breakfast cereals' },
14
+ { id: 'en:breads', name: 'Breads' },
15
+ { id: 'en:cakes', name: 'Cakes' },
16
+ { id: 'en:candies', name: 'Candies' },
17
+ { id: 'en:cereals-and-potatoes', name: 'Cereals and potatoes' },
18
+ { id: 'en:cheeses', name: 'Cheeses' },
19
+ { id: 'en:chips-and-crisps', name: 'Chips and crisps' },
20
+ { id: 'en:chocolate-bars', name: 'Chocolate bars' },
21
+ { id: 'en:chocolates', name: 'Chocolates' },
22
+ { id: 'en:cocoa-and-chocolate-products', name: 'Cocoa and chocolate products' },
23
+ { id: 'en:coffee', name: 'Coffee' },
24
+ { id: 'en:condiments', name: 'Condiments' },
25
+ { id: 'en:cookies', name: 'Cookies' },
26
+ { id: 'en:dairy-desserts', name: 'Dairy desserts' },
27
+ { id: 'en:dried-fruits', name: 'Dried fruits' },
28
+ { id: 'en:energy-drinks', name: 'Energy drinks' },
29
+ { id: 'en:fermented-milk-products', name: 'Fermented milk products' },
30
+ { id: 'en:fish', name: 'Fish' },
31
+ { id: 'en:fruit-juices', name: 'Fruit juices' },
32
+ { id: 'en:fruits-and-vegetables-based-foods', name: 'Fruits and vegetables based foods' },
33
+ { id: 'en:ice-creams', name: 'Ice creams' },
34
+ { id: 'en:jams', name: 'Jams' },
35
+ { id: 'en:legumes', name: 'Legumes' },
36
+ { id: 'en:margarines', name: 'Margarines' },
37
+ { id: 'en:meats', name: 'Meats' },
38
+ { id: 'en:milk', name: 'Milk' },
39
+ { id: 'en:mineral-waters', name: 'Mineral waters' },
40
+ { id: 'en:mixed-salads', name: 'Mixed salads' },
41
+ { id: 'en:nuts', name: 'Nuts' },
42
+ { id: 'en:oils', name: 'Oils' },
43
+ { id: 'en:pasta', name: 'Pasta' },
44
+ { id: 'en:pastries', name: 'Pastries' },
45
+ { id: 'en:plant-based-milks', name: 'Plant-based milks' },
46
+ { id: 'en:prepared-meals', name: 'Prepared meals' },
47
+ { id: 'en:processed-meats', name: 'Processed meats' },
48
+ { id: 'en:rice', name: 'Rice' },
49
+ { id: 'en:sauces', name: 'Sauces' },
50
+ { id: 'en:snacks', name: 'Snacks' },
51
+ { id: 'en:soft-drinks', name: 'Soft drinks' },
52
+ { id: 'en:soups', name: 'Soups' },
53
+ { id: 'en:spreads', name: 'Spreads' },
54
+ { id: 'en:sugars', name: 'Sugars' },
55
+ { id: 'en:sweetened-beverages', name: 'Sweetened beverages' },
56
+ { id: 'en:tea', name: 'Tea' },
57
+ { id: 'en:vegetables', name: 'Vegetables' },
58
+ { id: 'en:waters', name: 'Waters' },
59
+ { id: 'en:wines', name: 'Wines' },
60
+ { id: 'en:yogurts', name: 'Yogurts' },
61
+ { id: 'en:baby-foods', name: 'Baby foods' },
62
+ { id: 'en:cereals', name: 'Cereals' },
63
+ { id: 'en:crackers', name: 'Crackers' },
64
+ { id: 'en:dairy-products', name: 'Dairy products' },
65
+ { id: 'en:fats', name: 'Fats' },
66
+ { id: 'en:flavoured-waters', name: 'Flavoured waters' },
67
+ { id: 'en:flour', name: 'Flour' },
68
+ { id: 'en:fresh-cheeses', name: 'Fresh cheeses' },
69
+ { id: 'en:fruit-beverages', name: 'Fruit beverages' },
70
+ { id: 'en:honey', name: 'Honey' },
71
+ { id: 'en:ketchup', name: 'Ketchup' },
72
+ { id: 'en:muesli', name: 'Muesli' },
73
+ { id: 'en:mustard', name: 'Mustard' },
74
+ { id: 'en:noodles', name: 'Noodles' },
75
+ { id: 'en:olive-oils', name: 'Olive oils' },
76
+ { id: 'en:plant-based-foods', name: 'Plant-based foods' },
77
+ { id: 'en:potato-chips', name: 'Potato chips' },
78
+ { id: 'en:protein-bars', name: 'Protein bars' },
79
+ { id: 'en:salted-snacks', name: 'Salted snacks' },
80
+ { id: 'en:sandwiches', name: 'Sandwiches' },
81
+ { id: 'en:seafood', name: 'Seafood' },
82
+ { id: 'en:seeds', name: 'Seeds' },
83
+ { id: 'en:soy-beverages', name: 'Soy beverages' },
84
+ { id: 'en:spices', name: 'Spices' },
85
+ { id: 'en:sugar-substitutes', name: 'Sugar substitutes' },
86
+ { id: 'en:sweet-snacks', name: 'Sweet snacks' },
87
+ { id: 'en:teas', name: 'Teas' },
88
+ { id: 'en:vinegars', name: 'Vinegars' },
89
+ { id: 'en:whipped-creams', name: 'Whipped creams' },
90
+ { id: 'en:whole-wheat-breads', name: 'Whole wheat breads' },
91
+ ],
92
+ labels: [
93
+ { id: 'en:organic', name: 'Organic' },
94
+ { id: 'en:fair-trade', name: 'Fair trade' },
95
+ { id: 'en:no-gluten', name: 'No gluten' },
96
+ { id: 'en:gluten-free', name: 'Gluten free' },
97
+ { id: 'en:vegan', name: 'Vegan' },
98
+ { id: 'en:vegetarian', name: 'Vegetarian' },
99
+ { id: 'en:no-added-sugar', name: 'No added sugar' },
100
+ { id: 'en:no-artificial-colors', name: 'No artificial colors' },
101
+ { id: 'en:no-artificial-flavors', name: 'No artificial flavors' },
102
+ { id: 'en:no-preservatives', name: 'No preservatives' },
103
+ { id: 'en:non-gmo', name: 'Non GMO' },
104
+ { id: 'en:kosher', name: 'Kosher' },
105
+ { id: 'en:halal', name: 'Halal' },
106
+ { id: 'en:lactose-free', name: 'Lactose free' },
107
+ { id: 'en:eu-organic', name: 'EU Organic' },
108
+ { id: 'en:usda-organic', name: 'USDA Organic' },
109
+ { id: 'en:rainforest-alliance', name: 'Rainforest Alliance' },
110
+ { id: 'en:made-in-france', name: 'Made in France' },
111
+ { id: 'en:bio', name: 'Bio' },
112
+ { id: 'en:whole-grain', name: 'Whole grain' },
113
+ { id: 'en:low-fat', name: 'Low fat' },
114
+ { id: 'en:low-sugar', name: 'Low sugar' },
115
+ { id: 'en:low-sodium', name: 'Low sodium' },
116
+ { id: 'en:high-protein', name: 'High protein' },
117
+ { id: 'en:high-fiber', name: 'High fiber' },
118
+ { id: 'en:no-gluten-containing-ingredients', name: 'No gluten-containing ingredients' },
119
+ { id: 'en:palm-oil-free', name: 'Palm oil free' },
120
+ { id: 'en:without-palm-oil', name: 'Without palm oil' },
121
+ { id: 'en:fr-bio', name: 'FR Bio' },
122
+ { id: 'en:made-in-germany', name: 'Made in Germany' },
123
+ ],
124
+ allergens: [
125
+ { id: 'en:gluten', name: 'Gluten' },
126
+ { id: 'en:milk', name: 'Milk' },
127
+ { id: 'en:eggs', name: 'Eggs' },
128
+ { id: 'en:fish', name: 'Fish' },
129
+ { id: 'en:shellfish', name: 'Shellfish (Crustaceans)' },
130
+ { id: 'en:peanuts', name: 'Peanuts' },
131
+ { id: 'en:soybeans', name: 'Soybeans' },
132
+ { id: 'en:tree-nuts', name: 'Tree nuts' },
133
+ { id: 'en:celery', name: 'Celery' },
134
+ { id: 'en:mustard', name: 'Mustard' },
135
+ { id: 'en:sesame-seeds', name: 'Sesame seeds' },
136
+ { id: 'en:sulphur-dioxide-and-sulphites', name: 'Sulphur dioxide and sulphites' },
137
+ { id: 'en:lupin', name: 'Lupin' },
138
+ { id: 'en:molluscs', name: 'Molluscs' },
139
+ { id: 'en:nuts', name: 'Nuts (general)' },
140
+ { id: 'en:wheat', name: 'Wheat' },
141
+ { id: 'en:rye', name: 'Rye' },
142
+ { id: 'en:barley', name: 'Barley' },
143
+ { id: 'en:oats', name: 'Oats' },
144
+ { id: 'en:lactose', name: 'Lactose' },
145
+ { id: 'en:almonds', name: 'Almonds' },
146
+ { id: 'en:cashews', name: 'Cashews' },
147
+ { id: 'en:walnuts', name: 'Walnuts' },
148
+ { id: 'en:hazelnuts', name: 'Hazelnuts' },
149
+ { id: 'en:pecans', name: 'Pecans' },
150
+ { id: 'en:pistachios', name: 'Pistachios' },
151
+ { id: 'en:brazil-nuts', name: 'Brazil nuts' },
152
+ ],
153
+ additives: [
154
+ { id: 'en:e100', name: 'E100 Curcumin' },
155
+ { id: 'en:e102', name: 'E102 Tartrazine' },
156
+ { id: 'en:e110', name: 'E110 Sunset yellow FCF' },
157
+ { id: 'en:e120', name: 'E120 Cochineal' },
158
+ { id: 'en:e122', name: 'E122 Azorubine' },
159
+ { id: 'en:e124', name: 'E124 Ponceau 4R' },
160
+ { id: 'en:e129', name: 'E129 Allura red AC' },
161
+ { id: 'en:e131', name: 'E131 Patent blue V' },
162
+ { id: 'en:e133', name: 'E133 Brilliant blue FCF' },
163
+ { id: 'en:e160a', name: 'E160a Carotenes' },
164
+ { id: 'en:e200', name: 'E200 Sorbic acid' },
165
+ { id: 'en:e202', name: 'E202 Potassium sorbate' },
166
+ { id: 'en:e210', name: 'E210 Benzoic acid' },
167
+ { id: 'en:e211', name: 'E211 Sodium benzoate' },
168
+ { id: 'en:e220', name: 'E220 Sulphur dioxide' },
169
+ { id: 'en:e250', name: 'E250 Sodium nitrite' },
170
+ { id: 'en:e251', name: 'E251 Sodium nitrate' },
171
+ { id: 'en:e300', name: 'E300 Ascorbic acid (Vitamin C)' },
172
+ { id: 'en:e301', name: 'E301 Sodium ascorbate' },
173
+ { id: 'en:e306', name: 'E306 Tocopherols (Vitamin E)' },
174
+ { id: 'en:e322', name: 'E322 Lecithins' },
175
+ { id: 'en:e322i', name: 'E322i Soya lecithin' },
176
+ { id: 'en:e330', name: 'E330 Citric acid' },
177
+ { id: 'en:e331', name: 'E331 Sodium citrates' },
178
+ { id: 'en:e407', name: 'E407 Carrageenan' },
179
+ { id: 'en:e412', name: 'E412 Guar gum' },
180
+ { id: 'en:e414', name: 'E414 Acacia gum' },
181
+ { id: 'en:e415', name: 'E415 Xanthan gum' },
182
+ { id: 'en:e420', name: 'E420 Sorbitol' },
183
+ { id: 'en:e421', name: 'E421 Mannitol' },
184
+ { id: 'en:e422', name: 'E422 Glycerol' },
185
+ { id: 'en:e440', name: 'E440 Pectins' },
186
+ { id: 'en:e450', name: 'E450 Diphosphates' },
187
+ { id: 'en:e471', name: 'E471 Mono- and diglycerides of fatty acids' },
188
+ { id: 'en:e500', name: 'E500 Sodium carbonates' },
189
+ { id: 'en:e503', name: 'E503 Ammonium carbonates' },
190
+ { id: 'en:e621', name: 'E621 Monosodium glutamate (MSG)' },
191
+ { id: 'en:e627', name: 'E627 Disodium guanylate' },
192
+ { id: 'en:e631', name: 'E631 Disodium inosinate' },
193
+ { id: 'en:e951', name: 'E951 Aspartame' },
194
+ { id: 'en:e952', name: 'E952 Cyclamic acid' },
195
+ { id: 'en:e954', name: 'E954 Saccharin' },
196
+ { id: 'en:e955', name: 'E955 Sucralose' },
197
+ { id: 'en:e960', name: 'E960 Steviol glycosides' },
198
+ ],
199
+ countries: [
200
+ { id: 'en:france', name: 'France' },
201
+ { id: 'en:united-states', name: 'United States' },
202
+ { id: 'en:germany', name: 'Germany' },
203
+ { id: 'en:united-kingdom', name: 'United Kingdom' },
204
+ { id: 'en:spain', name: 'Spain' },
205
+ { id: 'en:italy', name: 'Italy' },
206
+ { id: 'en:belgium', name: 'Belgium' },
207
+ { id: 'en:netherlands', name: 'Netherlands' },
208
+ { id: 'en:switzerland', name: 'Switzerland' },
209
+ { id: 'en:canada', name: 'Canada' },
210
+ { id: 'en:australia', name: 'Australia' },
211
+ { id: 'en:brazil', name: 'Brazil' },
212
+ { id: 'en:china', name: 'China' },
213
+ { id: 'en:india', name: 'India' },
214
+ { id: 'en:japan', name: 'Japan' },
215
+ { id: 'en:mexico', name: 'Mexico' },
216
+ { id: 'en:portugal', name: 'Portugal' },
217
+ { id: 'en:poland', name: 'Poland' },
218
+ { id: 'en:austria', name: 'Austria' },
219
+ { id: 'en:sweden', name: 'Sweden' },
220
+ { id: 'en:denmark', name: 'Denmark' },
221
+ { id: 'en:norway', name: 'Norway' },
222
+ { id: 'en:finland', name: 'Finland' },
223
+ { id: 'en:argentina', name: 'Argentina' },
224
+ { id: 'en:south-africa', name: 'South Africa' },
225
+ { id: 'en:new-zealand', name: 'New Zealand' },
226
+ { id: 'en:singapore', name: 'Singapore' },
227
+ { id: 'en:south-korea', name: 'South Korea' },
228
+ { id: 'en:russia', name: 'Russia' },
229
+ { id: 'en:turkey', name: 'Turkey' },
230
+ ],
231
+ nova_groups: [
232
+ { id: 'en:1', name: 'NOVA 1 — Unprocessed or minimally processed foods' },
233
+ { id: 'en:2', name: 'NOVA 2 — Processed culinary ingredients' },
234
+ { id: 'en:3', name: 'NOVA 3 — Processed foods' },
235
+ { id: 'en:4', name: 'NOVA 4 — Ultra-processed food and drink products' },
236
+ ],
237
+ nutrition_grades: [
238
+ { id: 'a', name: 'Nutri-Score A — Highest nutritional quality' },
239
+ { id: 'b', name: 'Nutri-Score B — Good nutritional quality' },
240
+ { id: 'c', name: 'Nutri-Score C — Average nutritional quality' },
241
+ { id: 'd', name: 'Nutri-Score D — Below average nutritional quality' },
242
+ { id: 'e', name: 'Nutri-Score E — Lowest nutritional quality' },
243
+ ],
244
+ };
245
+ export class TaxonomyService {
246
+ /** Return tags for a given facet, optionally filtered by a substring search term. */
247
+ search(facet, search, limit) {
248
+ const all = TAXONOMY[facet];
249
+ const filtered = search && search.trim().length > 0
250
+ ? all.filter((t) => t.id.toLowerCase().includes(search.toLowerCase()) ||
251
+ t.name.toLowerCase().includes(search.toLowerCase()))
252
+ : all;
253
+ return {
254
+ facet,
255
+ tags: filtered.slice(0, limit),
256
+ total_in_facet: all.length,
257
+ };
258
+ }
259
+ }
260
+ /* --- Init/accessor pattern --- */
261
+ let _service;
262
+ export function initTaxonomyService() {
263
+ _service = new TaxonomyService();
264
+ }
265
+ export function getTaxonomyService() {
266
+ if (!_service) {
267
+ throw new Error('TaxonomyService not initialized — call initTaxonomyService() in setup()');
268
+ }
269
+ return _service;
270
+ }
271
+ //# sourceMappingURL=taxonomy-service.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"taxonomy-service.js","sourceRoot":"","sources":["../../../src/services/taxonomy/taxonomy-service.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,102 @@
1
+ {
2
+ "name": "@cyanheads/openfoodfacts-mcp-server",
3
+ "version": "0.1.0",
4
+ "mcpName": "io.github.cyanheads/openfoodfacts-mcp-server",
5
+ "description": "Look up food products by barcode, search by ingredient or nutrition filter, compare products side-by-side, and browse the canonical tag vocabulary via MCP. STDIO or Streamable HTTP.",
6
+ "type": "module",
7
+ "main": "dist/index.js",
8
+ "types": "dist/index.d.ts",
9
+ "bin": {
10
+ "openfoodfacts-mcp-server": "dist/index.js"
11
+ },
12
+ "files": [
13
+ "changelog/",
14
+ "dist/",
15
+ "README.md",
16
+ "LICENSE",
17
+ "CLAUDE.md",
18
+ "AGENTS.md",
19
+ "Dockerfile",
20
+ "server.json"
21
+ ],
22
+ "scripts": {
23
+ "build": "bun run scripts/build.ts",
24
+ "rebuild": "bun run scripts/clean.ts && bun run scripts/build.ts",
25
+ "clean": "bun run scripts/clean.ts",
26
+ "devcheck": "bun run scripts/devcheck.ts",
27
+ "audit:refresh": "rm -f bun.lock && bun install && bun audit",
28
+ "tree": "bun run scripts/tree.ts",
29
+ "list-skills": "bun run scripts/list-skills.ts",
30
+ "format": "biome check --write .",
31
+ "format:unsafe": "biome check --write --unsafe .",
32
+ "lint:mcp": "bun run scripts/lint-mcp.ts",
33
+ "lint:packaging": "bun run scripts/lint-packaging.ts",
34
+ "bundle": "bun run build && npx -y @anthropic-ai/mcpb pack . dist/openfoodfacts-mcp-server.mcpb",
35
+ "changelog:build": "bun run scripts/build-changelog.ts",
36
+ "changelog:check": "bun run scripts/build-changelog.ts --check",
37
+ "test": "bunx vitest run",
38
+ "start": "bun ./dist/index.js",
39
+ "start:stdio": "MCP_TRANSPORT_TYPE=stdio bun ./dist/index.js",
40
+ "start:http": "MCP_TRANSPORT_TYPE=http bun ./dist/index.js",
41
+ "publish-mcp": "mcp-publisher login github -token \"$(security find-generic-password -a \"$USER\" -s mcp-publisher-github-pat -w)\" && mcp-publisher publish"
42
+ },
43
+ "keywords": [
44
+ "openfoodfacts",
45
+ "food",
46
+ "nutrition",
47
+ "barcode",
48
+ "nutriscore",
49
+ "nova",
50
+ "ingredients",
51
+ "allergens",
52
+ "mcp",
53
+ "mcp-server",
54
+ "model-context-protocol",
55
+ "typescript",
56
+ "bun",
57
+ "stdio",
58
+ "streamable-http"
59
+ ],
60
+ "repository": {
61
+ "type": "git",
62
+ "url": "git+https://github.com/cyanheads/openfoodfacts-mcp-server.git"
63
+ },
64
+ "homepage": "https://github.com/cyanheads/openfoodfacts-mcp-server#readme",
65
+ "bugs": {
66
+ "url": "https://github.com/cyanheads/openfoodfacts-mcp-server/issues"
67
+ },
68
+ "author": "cyanheads <casey@caseyjhand.com> (https://github.com/cyanheads/openfoodfacts-mcp-server#readme)",
69
+ "funding": [
70
+ {
71
+ "type": "github",
72
+ "url": "https://github.com/sponsors/cyanheads"
73
+ },
74
+ {
75
+ "type": "buy_me_a_coffee",
76
+ "url": "https://www.buymeacoffee.com/cyanheads"
77
+ }
78
+ ],
79
+ "license": "Apache-2.0",
80
+ "packageManager": "bun@1.3.2",
81
+ "engines": {
82
+ "bun": ">=1.3.0",
83
+ "node": ">=24.0.0"
84
+ },
85
+ "publishConfig": {
86
+ "access": "public"
87
+ },
88
+ "dependencies": {
89
+ "@cyanheads/mcp-ts-core": "^0.9.16",
90
+ "pino-pretty": "^13.1.3",
91
+ "zod": "^4.4.3"
92
+ },
93
+ "devDependencies": {
94
+ "@biomejs/biome": "^2.4.7",
95
+ "@types/node": "^25.6.0",
96
+ "depcheck": "^1.4.7",
97
+ "ignore": "^7.0.5",
98
+ "tsc-alias": "^1.8.16",
99
+ "typescript": "^5.9.3",
100
+ "vitest": "^4.1.0"
101
+ }
102
+ }