Skip to main content
Glama
smeet666

mcp-ptitchef

mcp-ptitchef

CI npm licence MIT

Un servidor MCP que lee recetas en Ptitchef. Solo lectura, sin clave de API, sin cuenta.

Versión francesa


Por qué existe

Ptitchef navega por sus recetas mediante un árbol de familias de ingredientes, y escribe la dirección de cada categoría libremente. Lo mismo aparece como chou-kale en una línea, como recette-de-petits-pois en la siguiente y como recettes-aux-feves en una tercera. No hay regla para derivar una a partir del nombre de un ingrediente.

Una dirección construida a mano, por tanto, falla, y el sitio responde al fallo enviando al lector a la raíz del árbol con HTTP 200 y las categorías de la propia raíz. Un modelo que adivinara un slug obtiene una respuesta completa y segura sobre un nivel que nunca pidió.

Este servidor publica el árbol, de modo que una categoría se abre por el nombre que le dio el sitio.

Related MCP server: France BOAMP MCP

Las herramientas

list_categories

Enumera las categorías por las que se navegan las recetas. Si se llama sin argumentos, devuelve las familias de ingredientes; pasa de vuelta el slug de una familia para enumerar lo que contiene.

Argumento

Tipo

Significado

family

cadena, opcional

El slug de una familia para abrir, de una llamada anterior. Omítelo para leer la raíz.

limit

entero, opcional

Entradas a mostrar, 50 por defecto, 200 como máximo.

{
  "family": null,
  "family_title": "Recettes de cuisine sur Ptitchef",
  "categories": [
    {
      "slug": "legume",
      "title": "Légume",
      "url": "https://www.ptitchef.com/recettes/cat/legume",
      "description": null,
      "sample_children": [
        {
          "slug": "pois-mange-tout",
          "title": "Pois mange-tout",
          "url": "https://www.ptitchef.com/recettes/pois-mange-tout"
        }
      ],
      "is_family": true
    }
  ],
  "category_count": 15,
  "categories_published": 15,
  "url": "https://www.ptitchef.com/recettes",
  "source": "Ptitchef",
  "notes": ["…"]
}

search_recipes

Busca por plato o ingrediente. El sitio responde de una de dos maneras, y kind indica cuál.

Argumento

Tipo

Significado

query

cadena

Un plato o un ingrediente, en francés.

limit

entero, opcional

Filas a mostrar, 20 por defecto, 100 como máximo.

Buscar puree de patate douce devuelve kind: "topic" con topic_slug: "puree-de-patates-douces": el sitio tiene una página para ello, envía la búsqueda allí, y el total cuenta lo que contiene esa página. Buscar soupe froide concombre menthe devuelve kind: "free_text": el sitio no tiene tal página, responde en sus propios términos, y el total es el número de filas que sirvió.

browse_recipes

Lee una categoría página a página, o una de las tres listas que el sitio mantiene fijas.

Argumento

Tipo

Significado

category

cadena, opcional

Un slug de list_categories, o el topic_slug de una búsqueda.

listing

latest | top_rated | most_viewed

Una de las listas fijas del sitio.

page

entero, opcional

La página de una categoría a leer.

limit

entero, opcional

Filas a mostrar, 20 por defecto.

search_by_ingredients

Lee la búsqueda de nevera del propio sitio: de uno a cinco ingredientes dentro, recetas que los contienen fuera.

Argumento

Tipo

Significado

ingredients

cadena[]

De uno a cinco ingredientes, en francés.

limit

entero, opcional

Filas a mostrar, 20 por defecto.

get_recipe

Lee una receta y reescala sus ingredientes si se le pide.

Argumento

Tipo

Significado

id

cadena

El id de una fila de una búsqueda o una lista.

servings

entero, opcional

Reescala los ingredientes a este número de raciones.

Cada línea lleva un scaling que indica qué hizo la aritmética: scaled es exacto, rounded se ajustó para seguir siendo utilizable, unscaled no lleva nada que pueda multiplicarse. Duplicar 1 oeuf da 2 oeufs; dividirlo a la mitad da 1 oeuf marcado como rounded, porque medio huevo no es una cantidad que una cocina mida.

scale_ingredients

La misma aritmética, sin conexión, sobre cualquier lista de ingredientes en francés, sea cual sea su origen.

Argumento

Tipo

Significado

ingredients

cadena[]

Las líneas a reescalar.

factor

número

El multiplicador a aplicar.

from_servings y to_servings

números

O el par del que se lee el factor.

get_recipe_translations

Enumera los otros idiomas en los que se publicó una receta. Ptitchef es la edición francesa de una red de sitios que publican las mismas recetas, y cada página nombra sus homólogas. Cuántas haya es asunto de la propia receta: una reciente nombra más de veinte, una más antigua no nombra ninguna, y la respuesta indica lo que la página contiene en lugar de un número fijado aquí.

Lo que las respuestas se niegan a exagerar

Un nivel que el sitio sustituyó no es el nivel que se pidió. Una familia desconocida se responde con HTTP 200 y la raíz del árbol, así que la dirección de la que provino la respuesta decide de qué nivel se trata. Una familia que no se tenía se informa como not_found, en lugar de mostrarse como las categorías que el sitio ofreció en su lugar.

Las entradas junto a una familia son un extracto. La raíz muestra tres de ellas seguidas de una elipsis que el propio sitio imprime. Se devuelven bajo sample_children y una nota dice qué son, porque mostrarlas como el contenido de la familia ofrecería una familia de noventa como una familia de tres.

Dos recuentos, porque responden a dos preguntas. categories_published es lo que la página enumeró y category_count es lo que la respuesta mostró. Difieren siempre que un límite cortó la lista, y la nota dice en cuánto, en lugar de dejar que una lista limitada se lea como una completa.

Una entrada sin dirección se aparta en lugar de mostrarse. Un encabezado que el sitio publicó sin enlace no lleva ningún slug que devolver, así que se descarta, se cuenta y se nombra en las notas.

Un texto promocional que la página no contiene es null, nunca una cadena vacía. Una descripción vacía ofrecería un texto que nunca se publicó.

Una lista tiene dos totales que cuentan cosas distintas, y la respuesta dice cuál llegó. Una búsqueda que el sitio envía a una página de categoría informa del total de esa categoría; una búsqueda que responde él mismo informa del número de filas que sirvió. Sumar ambos añadiría un catálogo a una página.

Una valoración es la cifra que el sitio calculó. Una fila indica 3.8 en su carga útil y dibuja cuatro estrellas. La cifra dibujada se deja como está.

Una página más allá de la última vuelve como la página que el sitio sirvió. El sitio responde con la primera página, así que informar del número que se pidió enviaría a quien llama a dar vueltas por las mismas filas para siempre.

La búsqueda de nevera cuenta mucho más allá de lo que sirve. Encuentra ochenta y nueve recetas para tres ingredientes, ofrece veinticuatro de ellas en una página y no enlaza ninguna otra. La respuesta indica ambas cifras y dice que el resto no se puede leer.

Una guía no es una lista, y la respuesta dice cuál llegó. Algunos temas se sirven como una guía escrita por el sitio: recetas agrupadas bajo encabezados propios, sin total, y filas que solo llevan un nombre y una dirección. kind dice guide allí, y browse_recipes sobre el mismo slug lee la lista completa del tema con su total: épinards vuelve como una guía de 32, y su lista contiene 736.

Otra receta servida en lugar de una se muestra como una ausencia. Las palabras de la dirección de una receta son decorativas y su número no lo es: pedir un número que el sitio no tiene trae de vuelta una receta no relacionada, en HTTP 200 y con detalle completo. El número que llegó se compara con el número pedido.

Nada se multiplica a ciegas. Una cosa contable cae en la porción más pequeña que un cocinero saca de una de ella: un entero cuando no se puede medir la mitad de uno, un huevo; una mitad cuando la mitad de uno se vierte o se divide, un sobre. Una masa pasa a una unidad más pequeña antes de redondearse, así que una cantidad inferior a uno nunca redondea a cero. Una pizca conserva su propio vocabulario y su recuento se multiplica, porque el tamaño de una es cosa del cocinero.

Una lista devuelta sin reescalar lo dice una vez, en lugar de línea por línea. Sin raciones pedidas no hay aritmética, y marcar cada línea unscaled afirmaría que ninguna de ellas lleva nada que multiplicar.

El coste que el sitio estima se repite, nunca se recalcula. Es la cifra del propio sitio, y los lectores del sitio la discuten por considerarla demasiado baja; la respuesta lo dice en lugar de transmitirla en silencio o descartarla sin más.

Instalación

npx mcp-ptitchef

Claude Code

claude mcp add ptitchef -- npx -y mcp-ptitchef

Cualquier cliente MCP

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

Contenedor

docker build -t mcp-ptitchef .
docker run -i --rm mcp-ptitchef

El contenedor necesita alcanzar www.ptitchef.com y nada más. No recibe credenciales, porque no hay ninguna que recibir.

Ajustes

Cada ajuste es una variable de entorno, y ninguno es obligatorio. Un valor fuera de su rango se rechaza con una línea en stderr y el valor por defecto se mantiene: un ajuste que no puede tener efecto lo dice en lugar de ser recortado silenciosamente.

Variable

Por defecto

Rango

PTC_USER_AGENT

Tu propio identificador. El de este proyecto se mantiene añadido, para que el sitio pueda llegar a una persona.

PTC_MIN_INTERVAL_MS

1500

1000 a 60000

PTC_TIMEOUT_MS

20000

1000 a 120000

PTC_MAX_RETRIES

3

0 a 8

PTC_CACHE_TTL_MS

900000

0 a 86400000, 0 apaga el almacenamiento

PTC_CACHE_MAX_ENTRIES

200

1 a 5000

PTC_MAX_BODY_BYTES

8000000

100000 a 64000000. Más allá, una página se abandona en lugar de retenerse entera

PTC_BUDGET_MS

60000

5000 a 600000. Toda una lectura, sus reintentos y sus esperas incluidos

PTC_LOG_LEVEL

error

silent, error, info, debug

El límite mínimo de ritmo no se puede bajar desde fuera. El sitio es de lectura gratuita y no publica ningún retardo de rastreo, lo cual es una razón para ser cuidadoso, no una licencia para ir rápido.

Como biblioteca

La capa de lectura se publica por separado, con su ritmo, su almacenamiento y su vocabulario de errores y sin ningún protocolo adjunto:

import { PtitchefClient } from "mcp-ptitchef/client";

Errores

Seis códigos y no más. Quien llama decide según el código que abre el mensaje.

Code

Significado

not_found

El sitio no tiene nada en esa dirección

invalid_input

Los argumentos no pudieron producir una solicitud

rate_limited

El sitio pidió a este cliente que fuera más lento. No dice nada sobre si hubo coincidencias

parse_failure

Llegó una respuesta en una forma que este servidor no puede leer

network_error

La solicitud no pudo completarse

timeout

No llegó ninguna respuesta dentro del plazo

Atribución

Las recetas, los títulos y las categorías pertenecen a Ptitchef. Cada respuesta lleva la fuente, y un listado mostrado a un lector debe acreditar al sitio y enlazar la página.

Contribuciones

Consulta CONTRIBUTING.md. Los tests van primero, la cobertura tiene un mínimo del 100%, y la regla que todo sigue es que el servidor nunca dice nada que los datos no contengan.

Licenciado bajo MIT.


mcp-ptitchef (español)

Un servidor MCP que lee las recetas de Ptitchef. De solo lectura, sin clave de API y sin cuenta.

Por qué existe

Ptitchef recorre sus recetas mediante un árbol de familias de ingredientes, y escribe libremente la dirección de cada categoría. El mismo tipo de cosa se llama chou-kale en una línea, recette-de-petits-pois en la siguiente y recettes-aux-feves en una tercera. Ninguna regla permite deducir una del nombre de un ingrediente.

Una dirección construida a mano falla por tanto, y el sitio responde mal devolviendo al lector a la raíz del árbol, con HTTP 200, con las categorías de la raíz. Un modelo que ha adivinado un slug recibe una respuesta completa y contundente sobre un nivel que nunca ha pedido.

Este servidor publica el árbol, para que una categoría se abra por el nombre que el sitio le ha dado.

Las herramientas

list_categories

Lista las categorías por las que se recorren las recetas. Llamado sin argumento devuelve las familias de ingredientes; pasándole de nuevo el slug de una familia devuelve lo que contiene.

Argumento

Tipo

Significado

family

cadena, opcional

El slug de una familia que abrir, procedente de una llamada anterior. Si falta, el árbol se lee desde su raíz.

limit

entero, opcional

Entradas devueltas, 20 por defecto, 200 como máximo.

search_recipes

Busca por plato o por ingrediente. El sitio responde de cinco maneras, y kind dice cuál: topic cuando envía la búsqueda a una página de categoría propia, free_text cuando responde según sus propios términos, guide cuando ha redactado una guía para ese tema, recipe cuando juzga las palabras lo bastante precisas para abrir una ficha, y unmatched cuando sirve su página de inicio por no haber entendido.

Argumento

Tipo

Significado

query

cadena

Un plato o un ingrediente, en francés.

limit

entero, opcional

Líneas devueltas, 20 por defecto, 100 como máximo.

browse_recipes

Recorre una categoría página a página, o una de las tres listas que el sitio mantiene al día.

Argumento

Tipo

Significado

category

cadena, opcional

Un slug de list_categories, o el topic_slug de una búsqueda.

listing

latest | top_rated | most_viewed

Una de las listas permanentes del sitio.

page

entero, opcional

La página de una categoría que leer.

limit

entero, opcional

Líneas devueltas, 20 por defecto.

search_by_ingredients

Lee la búsqueda de la nevera del sitio: de uno a cinco ingredientes de entrada, las recetas que los contienen de salida.

Argumento

Tipo

Significado

ingredients

cadena[]

De uno a cinco ingredientes, en francés.

limit

entero, opcional

Líneas devueltas, 20 por defecto.

get_recipe

Lee una receta y reescala sus ingredientes bajo petición.

Argumento

Tipo

Significado

id

cadena

El id de una línea devuelta por una búsqueda o una lista.

servings

entero, opcional

Reescala los ingredientes para ese número de raciones.

Cada línea lleva un scaling que dice lo que ha hecho la aritmética: scaled es exacto, rounded se ha ajustado para seguir siendo utilizable, unscaled no llevaba nada que multiplicar. Doblar 1 oeuf da 2 oeufs; dividirlo entre dos da 1 oeuf marcado como rounded, porque medio huevo no es una cantidad que una cocina mida.

scale_ingredients

La misma aritmética, sin conexión, sobre cualquier lista francesa sea cual sea su fuente.

Argumento

Tipo

Significado

ingredients

cadena[]

Las líneas que reescalar.

factor

número

El multiplicador que aplicar.

from_servings y to_servings

números

O el par del que se deduce el factor.

get_recipe_translations

Lista los otros idiomas en los que se ha publicado una receta. Ptitchef es la edición francesa de una red de sitios que publican las mismas recetas, y cada página nombra sus homólogas. Cuántas hay pertenece a la receta: una reciente nombra más de veinte, una antigua ninguna.

Lo que las respuestas se niegan a afirmar

Una guía no es una lista, y la respuesta dice cuál ha llegado. Algunos temas se sirven mediante una guía que redacta el sitio, sin total, cuyas líneas llevan un nombre, una dirección, una imagen y un número de votos. kind vale guide ahí, y browse_recipes sobre el mismo slug devuelve la lista completa del tema con su total: épinards devuelve una guía de 32 recetas, su lista contiene 736.

Una receta servida en lugar de otra se devuelve como una ausencia. Las palabras de una dirección de receta son decorativas y su número no lo es: pedir un número que el sitio no tiene devuelve una receta sin relación, con HTTP 200 y con detalle completo. El número devuelto se compara con el número pedido.

Una página cuya lista es ilegible no es una ausencia. Un título que lleva un recuento y ninguna lista legible es una página que este servidor no sabe leer, y es lo que devuelve en lugar de «ninguna receta, el sitio dice que tiene 3200».

Una nota es la cifra que el sitio ha calculado. Una línea anuncia 3,8 en su carga y dibuja cuatro estrellas; es la cifra calculada la que se publica, y una guía que no calcula ninguna no publica ninguna.

Lo que cuenta un total se lee en la respuesta. Una búsqueda que el sitio envía a una página de categoría devuelve el total de esa categoría; una búsqueda que él mismo procesa devuelve lo que ha contado, que a veces supera las líneas servidas. La nota solo lo dice allí donde ambas cifras lo establecen.

Nada se multiplica a ciegas. Un elemento contable cae en la porción más pequeña que un cocinero toma de uno solo: un entero allí donde la mitad de uno no se mide, un huevo; una mitad allí donde se vierte o se corta, un sobre. Una masa baja de unidad antes de redondearse, por lo que una cantidad por debajo de la unidad nunca cae a cero. Una pizca conserva su propio vocabulario y ve multiplicado su recuento, porque el tamaño de una es el del cocinero.

Una lista devuelta sin reescalado lo dice una vez, en lugar de línea por línea. Sin servings no hay aritmética, y marcar cada línea como unscaled afirmaría que ninguna lleva nada que multiplicar.

El coste estimado se repite, nunca se recalcula. Es la cifra del sitio, publicada para el número de raciones que anuncia la página, y la respuesta dice cuál.

Una dirección leída en una página no sale de este sitio. Una línea que apunta a otro lugar se descarta en lugar de publicarse bajo la etiqueta «la página pública de la receta».

Instalación

npx mcp-ptitchef

Claude Code

claude mcp add ptitchef -- npx -y mcp-ptitchef

Cualquier cliente MCP

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

Contenedor

docker build -t mcp-ptitchef .
docker run -i --rm mcp-ptitchef

El contenedor debe poder conectar con www.ptitchef.com y nada más. No toma ningún identificador, ya que no hay ninguno que tomar.

Ajustes

Cada ajuste es una variable de entorno, y ninguna es obligatoria. Un valor fuera de los límites se rechaza con una línea en stderr y el valor por defecto se mantiene: un ajuste que no puede aplicarse lo dice en lugar de ser devuelto en silencio a los límites.

Variable

Defecto

Límites

PTC_USER_AGENT

Tu identificador. El del proyecto se sigue añadiendo, para que el sitio pueda contactar con una persona.

PTC_MIN_INTERVAL_MS

1500

1000 a 60000

PTC_TIMEOUT_MS

20000

1000 a 120000

PTC_MAX_RETRIES

3

0 a 8

PTC_CACHE_TTL_MS

900000

0 a 86400000, 0 apaga el almacenamiento

PTC_CACHE_MAX_ENTRIES

200

1 a 5000

PTC_LOG_LEVEL

error

silent, error, info, debug

El ritmo mínimo no se reduce desde fuera. El sitio es libre de leer y no publica ningún intervalo de exploración, lo cual es una razón para ser prudente.

Como biblioteca

La capa de lectura se publica sola, con su ritmo, su almacenamiento y su vocabulario de errores, sin protocolo adjunto:

import { PtitchefClient } from "mcp-ptitchef/client";

Errores

Seis códigos y no uno más. Un llamante se conecta al código que abre el mensaje.

Code

Lo que significa

not_found

El sitio no tiene nada en esta dirección

invalid_input

Los argumentos no podían producir una solicitud

rate_limited

El sitio ha pedido a este cliente que vaya más despacio. Eso no dice nada sobre lo que contiene

parse_failure

Una respuesta llegó en un formato que este servidor no sabe leer

network_error

La solicitud no pudo completarse

timeout

No llegó ninguna respuesta dentro del plazo

Atribución

Las recetas, los títulos y las categorías pertenecen a Ptitchef. Cada respuesta lleva la fuente, y una lista mostrada a un lector debe acreditar al sitio y enlazar la página.

Contribuir

Ver CONTRIBUTING.md. Los tests primero, la cobertura tiene un mínimo del 100 %, y la regla que todo sigue es que un servidor nunca dice algo que los datos no contengan.

Bajo licencia MIT.

A
license - permissive license
A
quality
B
maintenance

Maintenance

Maintainers
Response time
Release cycle
1Releases (12mo)
Commit activity

Related MCP Servers

  • F
    license
    C
    quality
    D
    maintenance
    Enables management of culinary recipes through web scraping from sites like Marmiton.org, recipe generation, ingredient management, and querying a MongoDB database of recipes, comments, users, and utensils.
    18
  • A
    license
    A
    quality
    B
    maintenance
    MCP server that searches French recipes from Marmiton, reads ingredients and steps, and rescales quantities to any number of servings without requiring an API key.
    6
    3
    2,395
    MIT

View all related MCP servers

Related MCP Connectors

  • Recipes MCP — wraps TheMealDB API (free tier, no auth)

  • Unofficial read-only MCP server for VeryChic hotel offers

  • Spoonacular food API: recipes, nutrition, ingredients, meal plans. Free 150/day.

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/smeet666/mcp-ptitchef'

If you have feedback or need assistance with the MCP directory API, please join our Discord server