wield-mcp 0.0.0-stage → 0.1.2
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/LICENSE +21 -0
- package/README.md +85 -2
- package/SETUP_PROMPT.md +25 -0
- package/assets/wield-app-icon.svg +2 -0
- package/assets/wield-mark.svg +2 -0
- package/dist/bridge.js +433 -0
- package/dist/extension/build-id.json +1 -0
- package/dist/extension/confirm.html +56 -0
- package/dist/extension/confirm.js +162 -0
- package/dist/extension/content.js +4228 -0
- package/dist/extension/icons/128.png +0 -0
- package/dist/extension/icons/16.png +0 -0
- package/dist/extension/icons/32.png +0 -0
- package/dist/extension/icons/48.png +0 -0
- package/dist/extension/managed_schema.json +41 -0
- package/dist/extension/manifest.json +150 -0
- package/dist/extension/popup.html +77 -0
- package/dist/extension/popup.js +182 -0
- package/dist/extension/recmain.js +206 -0
- package/dist/extension/record.html +48 -0
- package/dist/extension/record.js +1806 -0
- package/dist/extension/sample-recipe.json +218 -0
- package/dist/extension/sw.js +1907 -0
- package/dist/extension/tokens.css +201 -0
- package/dist/extension/ui.css +216 -0
- package/dist/extension/welcome.html +58 -0
- package/dist/extension/welcome.js +69 -0
- package/dist/extension-id.txt +1 -0
- package/dist/index.js +30382 -0
- package/package.json +48 -4
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schema": "https://wield.run/schema/recipe/v1.json",
|
|
3
|
+
"id": "chefkoch.de/search-recipes",
|
|
4
|
+
"version": 2,
|
|
5
|
+
"site": {
|
|
6
|
+
"id": "chefkoch.de",
|
|
7
|
+
"name": "Chefkoch",
|
|
8
|
+
"origin": "https://www.chefkoch.de",
|
|
9
|
+
"origins": [
|
|
10
|
+
"https://api.chefkoch.de"
|
|
11
|
+
],
|
|
12
|
+
"country": "DE",
|
|
13
|
+
"language": "de",
|
|
14
|
+
"login_url": "https://www.chefkoch.de/benutzer/einloggen"
|
|
15
|
+
},
|
|
16
|
+
"task": "Search cooking recipes with rating, difficulty and preparation time",
|
|
17
|
+
"description": "Searches Chefkoch, Germany's largest recipe site, like the site's own search: title, short description, star rating and number of votes, difficulty, preparation time, video flag, whether it is paywalled (Chefkoch Plus), image and link. Sponsored brand recipes are dropped by default.",
|
|
18
|
+
"keywords": [
|
|
19
|
+
"chefkoch",
|
|
20
|
+
"rezept",
|
|
21
|
+
"rezepte",
|
|
22
|
+
"kochen",
|
|
23
|
+
"backen",
|
|
24
|
+
"abendessen",
|
|
25
|
+
"vegetarisch",
|
|
26
|
+
"lasagne",
|
|
27
|
+
"recipe",
|
|
28
|
+
"recipes",
|
|
29
|
+
"cooking",
|
|
30
|
+
"what to cook",
|
|
31
|
+
"dinner ideas"
|
|
32
|
+
],
|
|
33
|
+
"effect": "read",
|
|
34
|
+
"requires_login": false,
|
|
35
|
+
"params": {
|
|
36
|
+
"type": "object",
|
|
37
|
+
"properties": {
|
|
38
|
+
"query": {
|
|
39
|
+
"type": "string",
|
|
40
|
+
"minLength": 2,
|
|
41
|
+
"maxLength": 100,
|
|
42
|
+
"description": "Dish or ingredients, e.g. 'lasagne', 'kürbissuppe', 'vegan schnell'"
|
|
43
|
+
},
|
|
44
|
+
"limit": {
|
|
45
|
+
"type": "integer",
|
|
46
|
+
"enum": [
|
|
47
|
+
10,
|
|
48
|
+
20,
|
|
49
|
+
50
|
|
50
|
+
],
|
|
51
|
+
"default": 20
|
|
52
|
+
},
|
|
53
|
+
"page": {
|
|
54
|
+
"type": "integer",
|
|
55
|
+
"minimum": 1,
|
|
56
|
+
"maximum": 20,
|
|
57
|
+
"default": 1
|
|
58
|
+
},
|
|
59
|
+
"include_sponsored": {
|
|
60
|
+
"type": "boolean",
|
|
61
|
+
"default": false,
|
|
62
|
+
"description": "Keep brand-campaign recipes (marked sponsored)"
|
|
63
|
+
}
|
|
64
|
+
},
|
|
65
|
+
"required": [
|
|
66
|
+
"query"
|
|
67
|
+
],
|
|
68
|
+
"additionalProperties": false
|
|
69
|
+
},
|
|
70
|
+
"steps": [
|
|
71
|
+
{
|
|
72
|
+
"id": "search",
|
|
73
|
+
"description": "Chefkoch's public search gateway, cross-origin from www.chefkoch.de (CORS allows it). The one-item foreach only computes the offset.",
|
|
74
|
+
"foreach": {
|
|
75
|
+
"in": "[{offset: (params.page - `1`) * params.limit}]",
|
|
76
|
+
"as": "pg",
|
|
77
|
+
"max": 1
|
|
78
|
+
},
|
|
79
|
+
"request": {
|
|
80
|
+
"method": "GET",
|
|
81
|
+
"url": "https://api.chefkoch.de/v2/search-gateway/recipes",
|
|
82
|
+
"query": {
|
|
83
|
+
"query": "{{params.query}}",
|
|
84
|
+
"limit": "{{params.limit}}",
|
|
85
|
+
"offset": "{{pg.offset}}"
|
|
86
|
+
},
|
|
87
|
+
"headers": {
|
|
88
|
+
"Accept": "application/json"
|
|
89
|
+
},
|
|
90
|
+
"credentials": "omit"
|
|
91
|
+
},
|
|
92
|
+
"expect": {
|
|
93
|
+
"status": [
|
|
94
|
+
200
|
|
95
|
+
],
|
|
96
|
+
"content_type": "json",
|
|
97
|
+
"assert": "body.results != null"
|
|
98
|
+
},
|
|
99
|
+
"extract": {
|
|
100
|
+
"json": {
|
|
101
|
+
"total": "count",
|
|
102
|
+
"recipes": "results[].recipe.{id: id, title: title, subtitle: subtitle || `null`, rating: rating.rating || `null`, votes: rating.numVotes || `0`, difficulty: difficulty == `1` && 'simple' || (difficulty == `2` && 'normal' || (difficulty == `3` && 'advanced' || `null`)), prep_time_min: preparationTime || `null`, has_video: hasVideo == `true`, plus_only: isPlus == `true`, sponsored: campaign != `null`, image_url: previewImageUrlTemplate && replace(previewImageUrlTemplate, '<format>', 'crop-480x360') || `null`, url: siteUrl}"
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
],
|
|
107
|
+
"output": {
|
|
108
|
+
"schema": {
|
|
109
|
+
"type": "object",
|
|
110
|
+
"required": [
|
|
111
|
+
"query",
|
|
112
|
+
"total",
|
|
113
|
+
"recipes"
|
|
114
|
+
],
|
|
115
|
+
"properties": {
|
|
116
|
+
"query": {
|
|
117
|
+
"type": "string"
|
|
118
|
+
},
|
|
119
|
+
"total": {
|
|
120
|
+
"type": "integer"
|
|
121
|
+
},
|
|
122
|
+
"page": {
|
|
123
|
+
"type": "integer"
|
|
124
|
+
},
|
|
125
|
+
"recipes": {
|
|
126
|
+
"type": "array",
|
|
127
|
+
"items": {
|
|
128
|
+
"type": "object",
|
|
129
|
+
"properties": {
|
|
130
|
+
"id": {
|
|
131
|
+
"type": "string"
|
|
132
|
+
},
|
|
133
|
+
"title": {
|
|
134
|
+
"type": "string"
|
|
135
|
+
},
|
|
136
|
+
"subtitle": {
|
|
137
|
+
"type": [
|
|
138
|
+
"string",
|
|
139
|
+
"null"
|
|
140
|
+
]
|
|
141
|
+
},
|
|
142
|
+
"rating": {
|
|
143
|
+
"type": [
|
|
144
|
+
"number",
|
|
145
|
+
"null"
|
|
146
|
+
],
|
|
147
|
+
"description": "0-5 stars"
|
|
148
|
+
},
|
|
149
|
+
"votes": {
|
|
150
|
+
"type": "integer"
|
|
151
|
+
},
|
|
152
|
+
"difficulty": {
|
|
153
|
+
"enum": [
|
|
154
|
+
"simple",
|
|
155
|
+
"normal",
|
|
156
|
+
"advanced",
|
|
157
|
+
null
|
|
158
|
+
]
|
|
159
|
+
},
|
|
160
|
+
"prep_time_min": {
|
|
161
|
+
"type": [
|
|
162
|
+
"integer",
|
|
163
|
+
"null"
|
|
164
|
+
],
|
|
165
|
+
"description": "Active preparation time in minutes"
|
|
166
|
+
},
|
|
167
|
+
"has_video": {
|
|
168
|
+
"type": "boolean"
|
|
169
|
+
},
|
|
170
|
+
"plus_only": {
|
|
171
|
+
"type": "boolean",
|
|
172
|
+
"description": "Full recipe needs a Chefkoch Plus subscription"
|
|
173
|
+
},
|
|
174
|
+
"sponsored": {
|
|
175
|
+
"type": "boolean"
|
|
176
|
+
},
|
|
177
|
+
"image_url": {
|
|
178
|
+
"type": [
|
|
179
|
+
"string",
|
|
180
|
+
"null"
|
|
181
|
+
]
|
|
182
|
+
},
|
|
183
|
+
"url": {
|
|
184
|
+
"type": "string",
|
|
185
|
+
"format": "uri"
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
},
|
|
192
|
+
"value": "let $sp = params.include_sponsored in {query: params.query, total: steps.search[0].total, page: params.page, recipes: steps.search[0].recipes[?$sp || !sponsored]}"
|
|
193
|
+
},
|
|
194
|
+
"verify": {
|
|
195
|
+
"example_params": {
|
|
196
|
+
"query": "lasagne",
|
|
197
|
+
"limit": 10
|
|
198
|
+
},
|
|
199
|
+
"checks": [
|
|
200
|
+
"length(output.recipes) > `5`",
|
|
201
|
+
"output.total > `100`",
|
|
202
|
+
"output.recipes[0].rating > `0`",
|
|
203
|
+
"starts_with(output.recipes[0].url, 'https://www.chefkoch.de/rezepte/')",
|
|
204
|
+
"length(output.recipes[?sponsored]) == `0`"
|
|
205
|
+
],
|
|
206
|
+
"max_ms": 3000
|
|
207
|
+
},
|
|
208
|
+
"provenance": {
|
|
209
|
+
"method": "browser-inspect",
|
|
210
|
+
"recorded_at": "2026-11-07T12:27:00+01:00",
|
|
211
|
+
"recorded_by": "C4",
|
|
212
|
+
"notes": "spikes/chefkoch.md. Public JSON search gateway used by chefkoch.de; CORS allows https://www.chefkoch.de (with credentials) and no cookies or tokens are needed, so credentials omit. Non-null campaign = brand-sponsored recipe; isPlus = paywalled. difficulty 1/2/3 = simpel/normal/pfiffig. v2 (2026-11-07 22:38): tos.notes only; requests and output unchanged."
|
|
213
|
+
},
|
|
214
|
+
"tos": {
|
|
215
|
+
"reviewed": false,
|
|
216
|
+
"notes": "Chefkoch's robots.txt disallows AI training crawlers (ClaudeBot, anthropic-ai, Claude-Web). Chefkoch's terms restrict automated use of its content. One user-initiated search at a time from the user's browser (1 request); recipe texts stay on chefkoch.de via the link."
|
|
217
|
+
}
|
|
218
|
+
}
|