# mcp-ptitchef [Health: Active]

**Category:** 🔎 Search & Data Extraction  
**Repository:** https://github.com/smeet666/mcp-ptitchef  
**GitHub Stars:** 0  
**npm Downloads (last month):** 1012  
**Views:** 0  
**Installs:** 0  
**Upvotes:** 0  
**Directory Page:** https://allmcps.com/mcp/mcp-ptitchef

## Description
Search Ptitchef recipes, read one, and rescale it to any servings. No API key.

## Tools
Capabilities this server exposes over MCP:

- **list_categories** — 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.
- **search_recipes** — 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.
- **browse_recipes** — 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. A page past the last one comes back either as the first page again or as not_found naming it past the last page.
- **search_by_ingredients** — 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.
- **get_recipe** — 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.
- **scale_ingredients** — 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.
- **get_recipe_translations** — 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.

## Claude Desktop Quick Installation
Install path detected from listing signals. Uses `npx` (confidence: high):

```json
"mcpServers": {
  "mcp-ptitchef": {
    "command": "npx",
    "args": ["-y","mcp-ptitchef"]
  }
}
```

## Documentation

## What mcp-ptitchef does

mcp-ptitchef exposes Ptitchef recipe data to an MCP-compatible chat client. Ptitchef is a French cooking site whose user-published recipes may include ingredients, preparation steps, cooking and preparation times, cost, nutrition information, ratings, photographs, and translations.

The server supports the search and data extraction workflow from discovery to a specific recipe. You can inspect the site's ingredient-family hierarchy, search for a dish or ingredient, browse category pages or standing lists, and then pass a result's recipe ID to `get_recipe`. It also supports ingredient-based recipe discovery, serving adjustments, standalone ingredient scaling, and translation lookup.

## How it works

The server communicates with the client over the standard MCP process setup. Recipe and category lookups access Ptitchef, while `scale_ingredients` performs ingredient-list calculations without making a site request. No account or API key is needed.

Category exploration starts with `list_categories`. Its results provide slugs and addresses that can be reused when browsing deeper categories. Search and browse responses include recipe or listing metadata such as IDs, titles, URLs, images, ratings, and counts where the site supplies them. Queries are expected to use French terms because Ptitchef is a French-language site.

## Setup and configuration

Node.js 24 or later is required. The npm-based configuration runs the package with `npx`:

```json
{
  "mcpServers": {
    "ptitchef": {
      "command": "npx",
      "args": ["-y", "mcp-ptitchef"]
    }
  }
}
```

The same standard configuration is suitable for Claude Desktop and Cursor, and Claude Code can add it with `claude mcp add ptitchef -- npx -y mcp-ptitchef`. VS Code provides an installation link. A Docker option is also available; it uses an interactive container without a TTY and needs outbound HTTPS access to `www.ptitchef.com`. The downloadable MCP bundle includes its dependencies and requires neither npm nor a separate configuration file in clients that support bundles.

## Tools and capabilities

- `list_categories` traverses Ptitchef's ingredient-family tree, optionally returning children beneath a family slug.
- `search_recipes` searches by dish or ingredient and returns recipe result metadata.
- `browse_recipes` reads category pages or the `latest`, `top_rated`, and `most_viewed` standing lists.
- `search_by_ingredients` finds recipes based on ingredients already available to the cook.
- `get_recipe` retrieves a recipe by ID and can adjust its quantities for a requested serving count.
- `scale_ingredients` rescales an ingredient list locally, without contacting Ptitchef.
- `get_recipe_translations` reports other languages in which a recipe was published.

## Limitations and notes

Search terms are intended to be French. The normal workflow uses a result ID from a listing with `get_recipe`. Search responses can represent category results, free-text results, or manually curated guides, and their totals do not always have the same meaning. A single-page result may report more available items than it returns. Category pagination can also reject a page beyond the end or return the first page again, depending on the site's response.

_Full upstream README: https://allmcps.com/mcp/mcp-ptitchef/readme_

