mcp-ptitchef
mcp-ptitchef
Un servidor MCP que lee recetas en Ptitchef. Solo lectura, sin clave de API, sin cuenta.
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 |
| cadena, opcional | El slug de una familia para abrir, de una llamada anterior. Omítelo para leer la raíz. |
| 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 |
| cadena | Un plato o un ingrediente, en francés. |
| 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 |
| cadena, opcional | Un slug de |
|
| Una de las listas fijas del sitio. |
| entero, opcional | La página de una categoría a leer. |
| 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 |
| cadena[] | De uno a cinco ingredientes, en francés. |
| entero, opcional | Filas a mostrar, 20 por defecto. |
get_recipe
Lee una receta y reescala sus ingredientes si se le pide.
Argumento | Tipo | Significado |
| cadena | El |
| 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 |
| cadena[] | Las líneas a reescalar. |
| número | El multiplicador a aplicar. |
| 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-ptitchefClaude Code
claude mcp add ptitchef -- npx -y mcp-ptitchefCualquier cliente MCP
{
"mcpServers": {
"ptitchef": {
"command": "npx",
"args": ["-y", "mcp-ptitchef"]
}
}
}Contenedor
docker build -t mcp-ptitchef .
docker run -i --rm mcp-ptitchefEl 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 |
| — | Tu propio identificador. El de este proyecto se mantiene añadido, para que el sitio pueda llegar a una persona. |
| 1500 | 1000 a 60000 |
| 20000 | 1000 a 120000 |
| 3 | 0 a 8 |
| 900000 | 0 a 86400000, 0 apaga el almacenamiento |
| 200 | 1 a 5000 |
| 8000000 | 100000 a 64000000. Más allá, una página se abandona en lugar de retenerse entera |
| 60000 | 5000 a 600000. Toda una lectura, sus reintentos y sus esperas incluidos |
|
|
|
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 |
| El sitio no tiene nada en esa dirección |
| Los argumentos no pudieron producir una solicitud |
| El sitio pidió a este cliente que fuera más lento. No dice nada sobre si hubo coincidencias |
| Llegó una respuesta en una forma que este servidor no puede leer |
| La solicitud no pudo completarse |
| 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 |
| cadena, opcional | El slug de una familia que abrir, procedente de una llamada anterior. Si falta, el árbol se lee desde su raíz. |
| 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 |
| cadena | Un plato o un ingrediente, en francés. |
| 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 |
| cadena, opcional | Un slug de |
|
| Una de las listas permanentes del sitio. |
| entero, opcional | La página de una categoría que leer. |
| 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 |
| cadena[] | De uno a cinco ingredientes, en francés. |
| entero, opcional | Líneas devueltas, 20 por defecto. |
get_recipe
Lee una receta y reescala sus ingredientes bajo petición.
Argumento | Tipo | Significado |
| cadena | El |
| 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 |
| cadena[] | Las líneas que reescalar. |
| número | El multiplicador que aplicar. |
| 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-ptitchefClaude Code
claude mcp add ptitchef -- npx -y mcp-ptitchefCualquier cliente MCP
{
"mcpServers": {
"ptitchef": {
"command": "npx",
"args": ["-y", "mcp-ptitchef"]
}
}
}Contenedor
docker build -t mcp-ptitchef .
docker run -i --rm mcp-ptitchefEl 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 |
| — | Tu identificador. El del proyecto se sigue añadiendo, para que el sitio pueda contactar con una persona. |
| 1500 | 1000 a 60000 |
| 20000 | 1000 a 120000 |
| 3 | 0 a 8 |
| 900000 | 0 a 86400000, 0 apaga el almacenamiento |
| 200 | 1 a 5000 |
|
|
|
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 |
| El sitio no tiene nada en esta dirección |
| Los argumentos no podían producir una solicitud |
| El sitio ha pedido a este cliente que vaya más despacio. Eso no dice nada sobre lo que contiene |
| Una respuesta llegó en un formato que este servidor no sabe leer |
| La solicitud no pudo completarse |
| 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.
Maintenance
Related MCP Servers
- FlicenseCqualityDmaintenanceEnables 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
- AlicenseNot gradedqualityCmaintenanceEnables querying French government public procurement notices (BOAMP) without an API key.13MIT
- AlicenseAqualityBmaintenanceMCP server that searches French recipes from Marmiton, reads ingredients and steps, and rescales quantities to any number of servings without requiring an API key.632,395MIT
- AlicenseNot gradedqualityAmaintenanceMCP server enabling search and retrieval of public SensCritique data, including works, user profiles, and collections.219MIT
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.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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