io.github.smeet666/mcp-ptitchef
NPM · MCP-PTITCHEF · 2 COMPONENTS · SCANNED SEP 20
Search Ptitchef recipes, read one, and rescale it to any servings. No API key.
Available components
How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →
Supply Chain Security98
- No malware found by supply-chain analysis.Pass
- No known CVEs affecting this package version or its production dependencies.Pass
- No install/post-install scripts declared.Pass
- 31 of 95 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency100
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Cryptographically verified build provenance (signed, bound to smeet666/mcp-ptitchef). View diagnostics → Pass
- Clear OSI-approved license (MIT).Pass
- Actively maintained (last published 21 days ago).Pass
- Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability69
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 1999 tokens (~285/item across 7 items; 7 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management80
- Stability observed for 24 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
- Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- We read all 7 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
- An AI judge read all 8 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
How do I install the io.github.smeet666/mcp-ptitchef server?
io.github.smeet666/mcp-ptitchef runs locally as an npm package, launched with npx -y mcp-ptitchef. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.
npm · mcp-ptitchef
claude mcp add smeet666-mcp-ptitchef -- npx -y mcp-ptitchef
{
"mcpServers": {
"smeet666-mcp-ptitchef": {
"command": "npx",
"args": [
"-y",
"mcp-ptitchef"
]
}
}
} {
"servers": {
"smeet666-mcp-ptitchef": {
"command": "npx",
"args": [
"-y",
"mcp-ptitchef"
]
}
}
} codex mcp add smeet666-mcp-ptitchef -- npx -y mcp-ptitchef
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"smeet666-mcp-ptitchef": {
"type": "local",
"command": [
"npx",
"-y",
"mcp-ptitchef"
],
"enabled": true
}
}
} openclaw mcp add smeet666-mcp-ptitchef --command npx --arg -y --arg mcp-ptitchef
mcp_servers:
smeet666-mcp-ptitchef:
command: "npx"
args: ["-y", "mcp-ptitchef"] {
"McpServers": {
"smeet666-mcp-ptitchef": {
"Transport": "stdio",
"Command": "npx",
"Arguments": [
"-y",
"mcp-ptitchef"
]
}
}
} assistant mcp add smeet666-mcp-ptitchef -t stdio -c npx -a -y mcp-ptitchef
{
"mcpServers": {
"smeet666-mcp-ptitchef": {
"command": "npx",
"args": [
"-y",
"mcp-ptitchef"
]
}
}
} Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 19 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 73 to 77. That category is still filling its 30-day observation window: 22 days of observed history at the previous scan, 23 at this one. The score rises as the window fills, whether or not the server changes.
- 17 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 67 to 70. That category is still filling its 30-day observation window: 20 days of observed history at the previous scan, 21 at this one. The score rises as the window fills, whether or not the server changes.
- 15 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 60 to 63. That category is still filling its 30-day observation window: 18 days of observed history at the previous scan, 19 at this one. The score rises as the window fills, whether or not the server changes.
- 13 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 53 to 57. That category is still filling its 30-day observation window: 16 days of observed history at the previous scan, 17 at this one. The score rises as the window fills, whether or not the server changes.
- 11 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 47 to 50. That category is still filling its 30-day observation window: 14 days of observed history at the previous scan, 15 at this one. The score rises as the window fills, whether or not the server changes.
- 9 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 40 to 43. That category is still filling its 30-day observation window: 12 days of observed history at the previous scan, 13 at this one. The score rises as the window fills, whether or not the server changes.
- 7 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 33 to 37. That category is still filling its 30-day observation window: 10 days of observed history at the previous scan, 11 at this one. The score rises as the window fills, whether or not the server changes.
- 4 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 23 to 27. That category is still filling its 30-day observation window: 7 days of observed history at the previous scan, 8 at this one. The score rises as the window fills, whether or not the server changes.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 20 Sept 2026 · Analysed npm/mcp-ptitchef@1.0.1
Provenance Verified
A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.
| Result | Verified |
|---|---|
| Ecosystem | npm |
| Reason | Verified |
| Discovered via | Registry attestation endpoint |
| Source repo | smeet666/mcp-ptitchef |
| Certificate issuer | https://token.actions.githubusercontent.com |
| Certificate SAN | https://github.com/smeet666/mcp-ptitchef/.github/workflows/publish.yml@refs/tags/v1.0.1 |
| Rekor log index | 2644874724 |
| Predicate type | https://slsa.dev/provenance/v1 |
| Subject digest | sha512:d583bf6bf057b1e50efc690dc6459e15925aa141d2883c5402206980b967d9d38ee429ee4efacde7998a1c20ea5b4fcf94912158413a53e994048abcc |
Background: How many MCP packages publish verified provenance →
Dependencies 95 packages
| Packages resolved | 95 |
|---|---|
| Stale | 31 |
| Tree resolution | Complete |
Background: SBOMs and build attestations, explained →
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
browse_recipes Browse a category or a standing list ~225
Read the recipes under one category of Ptitchef, page by page, or one of the lists the site keeps standing. Pass 'category' with a slug from list_categories or from a search's 'topic_slug', or pass 'listing' for one of: latest, top_rated, most_viewed. Never build a category slug by hand: the site writes them freely and answers an address it does not hold by serving another page. The page in the answer is the one the site served, which is the first page again when the page asked for is past the last one.
| Name | Type | Req | Description |
|---|---|---|---|
| category | string | – | A category slug: one from list_categories whose 'is_family' is false, or the 'topic_slug' a search answered with. A family's slug belongs to list_categories instead. |
| limit | integer | – | Rows to render, 20 by default. |
| listing | string | – | One of the site's standing lists, read instead of a category. |
| page | integer | – | The page of a category to read. A standing list has one page only. |
| Name | Type | Req | Description |
|---|---|---|---|
| asked | string | yes | What was asked for: a search, a category, or a list of ingredients. 'query' carries the same value under the name every source of recipes publishes it in. |
| folded | integer | yes | Rows naming a recipe already held. A guide lists one recipe under two headings where it belongs to both; such a row is counted in 'rows_seen' and rendered once. |
| kind | string | yes | How the listing came to be, which decides what its total counts. 'topic' means the site answered a search from a page of its own; 'free_text' means it answered on its own terms. |
| notes | array | yes | What qualifies this answer: what its total counts, what it left out, and where the site answered from an address other than the one asked for. Read these before quoting a figure. |
| page | integer | yes | The page that was read, which is the one the site served. |
| query | string | yes | What was asked for, under the name a search publishes it in. |
| result_count | integer | yes | Rows rendered here. |
| results | array | yes | – |
| rows_seen | integer | yes | Rows the site served on this page, before any were set aside. |
| single_page | boolean | yes | True when the site serves this listing on one page and offers no further one. |
| source | string | yes | The site this answer was read from. Credit it when showing a row. |
| title | string|null | yes | The site's own heading for the listing. |
| topic_slug | string|null | yes | The category page this listing was served from. Pass it to browse_recipes as 'category' to read the topic's further pages, and its total where this answer carries none. |
| total_available | – | yes | Recipes the site says this listing holds. Null when it published no figure. |
| url | string | yes | The address the listing was read from. |
No examples provided.
get_recipe Read one recipe ~180
Read one Ptitchef recipe: its ingredients, method, times, rating, nutrition and the cost the site estimates for it. Pass the 'id' of a row from search_recipes, browse_recipes or search_by_ingredients. Give 'servings' to rescale the ingredients, and read each line's 'scaling' before quoting a quantity: 'scaled' is exact arithmetic, 'rounded' was moved to stay usable, and 'unscaled' carries nothing that could be multiplied. A time or a figure the site publishes none of comes back null, never zero.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | The 'id' of a row from a search or a listing, which is the recipe's own page path. |
| servings | integer | – | Rescale the ingredients to this many servings. Left out, the ingredients come back as published. |
| Name | Type | Req | Description |
|---|---|---|---|
| attribution | string | yes | – |
| author | string|null | yes | – |
| author_url | string|null | yes | – |
| category | string|null | yes | – |
| cook_minutes | – | yes | – |
| cuisine | string|null | yes | – |
| description | string|null | yes | – |
| difficulty | string|null | yes | The site's own wording, such as 'facile'. |
| estimated_cost | string|null | yes | What the site estimates the ingredients cost, with the currency it names. Repeated as published: it is the site's figure and readers of the site dispute it. |
| faq | array | yes | – |
| id | string | yes | – |
| illustrated_steps | array | yes | – |
| image_url | string|null | yes | – |
| ingredients | array | yes | The lines as published where no servings were asked for, in which case 'yield.factor' is null and each line's 'scaling' describes no arithmetic. Pass 'servings' to rescale them. |
| keywords | array | yes | – |
| modified | string|null | yes | – |
| notes | array | yes | What qualifies this answer: what the arithmetic did, what it could not do, and what the site states rather than this server. Read these before quoting a quantity or a cost. |
| nutrition | – | yes | As published, per the serving size it names. |
| prep_minutes | – | yes | – |
| published | string|null | yes | – |
| rating | number|null | yes | 1 to 5, as the site states it. |
| rating_count | – | yes | – |
| review_count | – | yes | – |
| source | string | yes | The site this recipe was read from. Credit it when showing it. |
| steps | array | yes | The method, one line per step, in the shape every source of recipes publishes it in. 'illustrated_steps' carries the same lines beside the photograph the site took of each. |
| steps_are_one_block | boolean | yes | True when the site published its method as one block of prose, so the single step above is that block rather than the first of several. |
| title | string | yes | – |
| total_minutes | – | yes | – |
| translations | array | yes | The other languages this recipe was published in, which get_recipe_translations answers on its own for a caller who wants nothing else. |
| url | string | yes | The public page. Show this when citing the recipe. |
| yield | object | yes | – |
No examples provided.
get_recipe_translations Find a recipe in the other languages it was published in ~164
List the other languages a Ptitchef recipe was published in, with the page of each. get_recipe already carries this list under 'translations', so call this one only where the rest of the recipe is not wanted. Pass the 'id' of a row from a search or a listing. The pairing is the site's own: each page names its counterparts, and this repeats those names rather than matching titles. How many there are belongs to the recipe: a recent one names more than twenty, from German to Hindi, and an older one names none. An empty list is what the site published, and the read succeeded.
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | The 'id' of a row from a search or a listing, which is the recipe's own page path. |
| Name | Type | Req | Description |
|---|---|---|---|
| id | string | yes | – |
| notes | array | yes | – |
| source | string | yes | – |
| title | string | yes | – |
| translation_count | integer | yes | – |
| translations | array | yes | – |
| url | string | yes | The French page these counterparts were read from. |
No examples provided.
list_categories List the categories recipes are browsed by ~201
List the categories Ptitchef browses its recipes by. Called without arguments it returns the families of ingredients; pass a family's slug as 'family' to list the categories it holds. Read this before building an address by hand: the site writes its slugs freely, so the same vegetable appears as 'chou-kale' on one line and as 'recette-de-petits-pois' on the next, and a slug that was guessed lands on a page the site does not hold. Each entry carries the slug to pass back and the page to open.
| Name | Type | Req | Description |
|---|---|---|---|
| family | string | – | The slug of a family to open, taken from a previous call. Leave it out to read the families themselves, which is where the tree starts. |
| limit | integer | – | Entries to render, 20 by default and 200 at most. A level holding more than this says so, and 'categories_published' always states what the page listed. |
| Name | Type | Req | Description |
|---|---|---|---|
| categories | array | yes | – |
| categories_published | integer | yes | Entries the page listed, before any were rendered. |
| category_count | integer | yes | Entries rendered here. |
| family | string|null | yes | The family that was opened, or null for the root. |
| family_title | string|null | yes | The site's own heading for this level. Null when the page carries none. |
| notes | array | yes | – |
| source | string | yes | – |
| url | string | yes | The page these categories were read from. |
No examples provided.
scale_ingredients Rescale an ingredient list ~305
Rescale a list of ingredient lines to a different number of servings, without contacting any website. Give either 'factor' directly, or 'from_servings' and 'to_servings' and the factor is computed. Works on any French ingredient list, whatever its source, so it also serves a recipe pasted in by hand. Quantities in grams or millilitres are multiplied and rounded to readable values; a countable thing lands on a half when half of one can be poured, weighed or cut, as a boîte, a sachet, a feuille de gélatine or a cuillère can, and on a whole one when it cannot, as an oeuf, a jaune or a blanc; approximate measures such as a pinch or a handful have their count multiplied in whole units and stay in their own vocabulary. A line writing an article where a digit would go, as in 'un bouchon de rhum' or 'une pincée de sel', is read as one of that measure. Lines carrying no quantity are returned untouched and flagged. Prefer this over doing the arithmetic yourself.
| Name | Type | Req | Description |
|---|---|---|---|
| factor | number | – | Multiplier to apply. Use this or the from/to pair. |
| from_servings | number | – | How many servings the list is written for. |
| ingredients | array | yes | Ingredient lines, for example ['200 g de farine', '3 oeufs', 'sel']. |
| to_servings | number | – | How many servings are wanted. |
| Name | Type | Req | Description |
|---|---|---|---|
| factor | number | yes | – |
| ingredients | array | yes | – |
| notes | array | yes | – |
| rounded_count | integer | yes | Lines whose value rounding moved away from the exact product, not lines that could have been rounded. |
| scaled_count | integer | yes | – |
| unscaled_count | integer | yes | – |
No examples provided.
search_by_ingredients Find recipes from the ingredients a cook has ~138
Find Ptitchef recipes from the ingredients a cook already has. Give one to 5 ingredients in French, as a cook would name them ("poulet", "citron"). The site counts every recipe it finds and serves one page of them, so 'total_available' can be far larger than the rows returned, and the rest cannot be reached. A longer list than the site's own form reads is refused rather than sent and silently cut.
| Name | Type | Req | Description |
|---|---|---|---|
| ingredients | array | yes | One to 5 ingredients, in French. The site reads no more than that. |
| limit | integer | – | Rows to render, 20 by default. |
| Name | Type | Req | Description |
|---|---|---|---|
| asked | string | yes | What was asked for: a search, a category, or a list of ingredients. 'query' carries the same value under the name every source of recipes publishes it in. |
| folded | integer | yes | Rows naming a recipe already held. A guide lists one recipe under two headings where it belongs to both; such a row is counted in 'rows_seen' and rendered once. |
| kind | string | yes | How the listing came to be, which decides what its total counts. 'topic' means the site answered a search from a page of its own; 'free_text' means it answered on its own terms. |
| notes | array | yes | What qualifies this answer: what its total counts, what it left out, and where the site answered from an address other than the one asked for. Read these before quoting a figure. |
| page | integer | yes | The page that was read, which is the one the site served. |
| query | string | yes | What was asked for, under the name a search publishes it in. |
| result_count | integer | yes | Rows rendered here. |
| results | array | yes | – |
| rows_seen | integer | yes | Rows the site served on this page, before any were set aside. |
| single_page | boolean | yes | True when the site serves this listing on one page and offers no further one. |
| source | string | yes | The site this answer was read from. Credit it when showing a row. |
| title | string|null | yes | The site's own heading for the listing. |
| topic_slug | string|null | yes | The category page this listing was served from. Pass it to browse_recipes as 'category' to read the topic's further pages, and its total where this answer carries none. |
| total_available | – | yes | Recipes the site says this listing holds. Null when it published no figure. |
| url | string | yes | The address the listing was read from. |
No examples provided.
search_recipes Search recipes ~209
Search recipes on Ptitchef by dish or ingredient. The site answers in one of two ways and the answer says which: it either sends the search to a category page of its own, whose total counts what that category holds, or it answers on its own terms on a single page whose total is the number of rows served. When a category answered, 'topic_slug' names it and browse_recipes reads its further pages. Some topics come back as a guide the site wrote instead, grouped under headings of its own and carrying no total; browse_recipes on the same 'topic_slug' reads their full listing. A search the site matched nothing for comes back with no row and a total of zero, which is an absence the site stated.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | integer | – | Rows to render, 20 by default. 'rows_seen' states what the page served. |
| query | string | yes | A dish or an ingredient, in French, as a reader of the site would type it. |
| Name | Type | Req | Description |
|---|---|---|---|
| asked | string | yes | What was asked for: a search, a category, or a list of ingredients. 'query' carries the same value under the name every source of recipes publishes it in. |
| folded | integer | yes | Rows naming a recipe already held. A guide lists one recipe under two headings where it belongs to both; such a row is counted in 'rows_seen' and rendered once. |
| kind | string | yes | How the listing came to be, which decides what its total counts. 'topic' means the site answered a search from a page of its own; 'free_text' means it answered on its own terms. |
| notes | array | yes | What qualifies this answer: what its total counts, what it left out, and where the site answered from an address other than the one asked for. Read these before quoting a figure. |
| page | integer | yes | The page that was read, which is the one the site served. |
| query | string | yes | What was asked for, under the name a search publishes it in. |
| result_count | integer | yes | Rows rendered here. |
| results | array | yes | – |
| rows_seen | integer | yes | Rows the site served on this page, before any were set aside. |
| single_page | boolean | yes | True when the site serves this listing on one page and offers no further one. |
| source | string | yes | The site this answer was read from. Credit it when showing a row. |
| title | string|null | yes | The site's own heading for the listing. |
| topic_slug | string|null | yes | The category page this listing was served from. Pass it to browse_recipes as 'category' to read the topic's further pages, and its total where this answer carries none. |
| total_available | – | yes | Recipes the site says this listing holds. Null when it published no figure. |
| url | string | yes | The address the listing was read from. |
No examples provided.
What is the io.github.smeet666/mcp-ptitchef server?
io.github.smeet666/mcp-ptitchef is listed in the public MCP registry as io.github.smeet666/mcp-ptitchef. Search Ptitchef recipes, read one, and rescale it to any servings. No API key. This page covers its npm package (mcp-ptitchef).
Is the io.github.smeet666/mcp-ptitchef server safe to use?
io.github.smeet666/mcp-ptitchef scores 91 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 20 September 2026. It declares no install or post-install scripts. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.
What tools does the io.github.smeet666/mcp-ptitchef server expose?
io.github.smeet666/mcp-ptitchef exposes 7 tools: list_categories, search_recipes, browse_recipes, search_by_ingredients, get_recipe, and 2 more. Their descriptions and schemas cost roughly 1,422 tokens of context every time the server is loaded.
Is the io.github.smeet666/mcp-ptitchef server still maintained?
io.github.smeet666/mcp-ptitchef is still listed as active in the MCP registry. We last reached this channel on 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.
What licence is the io.github.smeet666/mcp-ptitchef server under?
io.github.smeet666/mcp-ptitchef declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.