Ptitchef

Busca recetas de Ptitchef, lee una y reescala a cualquier número de porciones. Sin clave API.

Documentación

mcp-ptitchef

npm CI license MCP Registry Glama M8ven LobeHub Install in Cursor Install in VS Code

Ptitchef es un sitio de cocina francés donde cocineros caseros publican sus recetas. Cada una incluye sus ingredientes, sus pasos, a menudo fotografiados uno a uno, sus tiempos de preparación y cocción, su costo, sus cifras nutricionales y las valoraciones que dejaron sus lectores. El sitio archiva sus recetas bajo un árbol de familias de ingredientes, y publica muchas de ellas en varios idiomas.

Este servidor conecta un cliente de chat con ese sitio. Puedes recorrer el árbol de categorías, buscar recetas por plato o por ingrediente, navegar por una categoría o por una de las listas permanentes del sitio, preguntar qué se puede hacer con lo que hay en la nevera, leer una receta con sus ingredientes reescalados al número de personas en tu mesa, y encontrar los otros idiomas en los que se publicó una receta. No necesita clave de API ni cuenta.

Versión francesa


Instalación

Instalación en un clic

Install in Cursor Install in VS Code

Claude Code

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

Claude Desktop, Cursor, y cualquier cliente que use el formato de configuración estándar

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

Se requiere Node 24 o posterior, y no es necesario establecer ninguna variable de entorno.

Con Docker

{
  "mcpServers": {
    "ptitchef": {
      "command": "docker",
      "args": ["run", "-i", "--rm", "ghcr.io/smeet666/mcp-ptitchef:1.0.1"]
    }
  }
}

-i mantiene abierto stdin, que es por donde viaja el protocolo, y -t se omite porque un TTY reescribe el flujo. El contenedor necesita HTTPS saliente hacia www.ptitchef.com, y nada más: sin volumen, sin puerto, sin credencial.

Paquete, sin npm

Descarga mcp-ptitchef-1.0.1.mcpb desde la última versión y ábrelo. Un cliente que admita paquetes MCP lo instala por sí solo, sin npm y sin archivo de configuración que editar. El paquete incluye sus dependencias, así que no se descarga nada en el momento de la instalación.

Lo que puedes preguntar

  • « Qu'est-ce que Ptitchef a comme recettes de chou kale ? »
  • "What can I cook with courgettes, feta and mint?"
  • "Read me that gratin for eight people."
  • "Show me the highest rated recipes on the site."
  • "Is that recipe published in Spanish too?"

Ptitchef es un sitio francés, así que sus recetas se encuentran en francés. El camino habitual va de un listado a una receta: una fila lleva un id, y get_recipe toma ese id.

Herramientas

HerramientaQué hace
list_categoriesRecorre el árbol de familias de ingredientes bajo el que el sitio archiva.
search_recipesEncuentra recetas por plato o por ingrediente.
browse_recipesLee una página de categoría página a página, o una lista permanente.
search_by_ingredientsResponde qué se puede hacer con lo que un cocinero ya tiene.
get_recipeLee una receta, reescalada a un número de porciones si se pide.
scale_ingredientsReescala cualquier lista de ingredientes, sin solicitar al sitio.
get_recipe_translationsLista los otros idiomas en los que se publicó una receta.

Empieza en list_categories. El sitio te da las direcciones correctas, lo que evita construir una a mano: una dirección construida así aterriza en la página principal del sitio.

list_categories

Lee el árbol bajo el que el sitio archiva sus recetas. Llamada sin argumentos, devuelve las familias; pasa el slug de una familia de vuelta como family para leer lo que contiene.

ArgumentoTipoObligatorioQué hace
familycadena, de 1 a 80 caracteresnoEl slug de una familia, para leer las categorías bajo ella.
limitentero, de 1 a 200, por defecto 20noFilas a servir.

A cambio: filas que llevan slug, que vuelve como family o como category; title en la propia redacción del sitio; url; description, que es null donde la página no lleva ninguna; y sample_children para las categorías un nivel más abajo.

search_recipes

Busca recetas por un plato o un ingrediente.

ArgumentoTipoObligatorioQué hace
querycadena, de 1 a 120 caracteresUn plato o un ingrediente, en francés.
limitentero, de 1 a 100, por defecto 20noFilas a servir.

A cambio: results, filas que llevan id, title, url, image_url, rating, rating_count y review_count, un contador para el que la página no imprime nada siendo null. El sobre dice cómo respondió el sitio: kind lee category cuando la respuesta vino de una página de categoría propia, cuyo total_available cuenta toda esa categoría, y free_text cuando el sitio respondió en sus propios términos en una sola página, donde el total cuenta las filas servidas. Esos dos totales cuentan cosas diferentes. kind también lee guide para un tema que el sitio escribió a mano, donde las filas llevan un nombre y una dirección y no existe total. Junto vienen result_count, rows_seen, page, single_page y url. Un listado marcado single_page cuyo total supera rows_seen tiene un resto que el sitio cuenta y no sirve.

browse_recipes

Lee una página de categoría página a página, o una de las listas permanentes del sitio.

ArgumentoTipoObligatorioQué hace
categorycadena, de 1 a 120 caracteresnoUn slug de categoría, como lo publicó list_categories.
listinglatest, top_rated o most_viewednoUna lista permanente, leída en lugar de una categoría.
pageentero, de 1 a 1000noLa página de una categoría a leer. Una lista permanente tiene una página.
limitentero, de 1 a 100, por defecto 20noFilas a servir.

A cambio: el sobre search_recipes vuelve, con kind leyendo category, standing o topic. page es la página que sirvió el sitio, que es la primera otra vez cuando la página pedida está más allá de la última.

search_by_ingredients

Responde qué se puede hacer con los ingredientes que un cocinero ya tiene.

ArgumentoTipoObligatorioQué hace
ingredientsmatriz de 1 a 5 cadenas, de 1 a 60 caracteresLos ingredientes disponibles, en francés.
limitentero, de 1 a 100, por defecto 20noFilas a servir.

A cambio: el sobre que devuelven los otros listados, con kind leyendo fridge. El sitio coincide con su propio vocabulario, así que un ingrediente que escribe de manera diferente estrecha la respuesta en lugar de ampliarla.

get_recipe

Lee una receta completa y reescala sus ingredientes cuando se da un número de porciones.

ArgumentoTipoObligatorioQué hace
idcadena, de 1 a 300 caracteresEl id de una fila de una búsqueda o un listado.
servingsentero, de 1 a 500noReescala los ingredientes a este número de porciones.

A cambio: title, url, description, image_url, category, cuisine, difficulty en la propia redacción del sitio, author, published, modified, rating, rating_count, review_count, prep_minutes, cook_minutes, total_minutes, nutrition tal como se publicó para el tamaño de porción que nombra, estimated_cost, keywords, faq y translations, cada null donde la página no indica nada. steps lleva el método con una línea por paso, y illustrated_steps los mismos pasos con la fotografía que el sitio tomó de cada uno. yield dice para qué se escribió la receta y a qué se reescaló. Cada ingrediente lleva scaling, que se lee scaled, rounded o unscaled: léelo antes de citar una cantidad, ya que rounded se movió para seguir siendo utilizable en una cocina.

scale_ingredients

Aplica la misma aritmética a cualquier lista de líneas de ingredientes en francés, sin solicitar al sitio.

ArgumentoTipoObligatorioQué hace
ingredientsmatriz de 1 a 100 cadenas, hasta 300 caracteresLas líneas a reescalar, en francés.
factornúmero, mayor que 0 y hasta 100uno de dosEl multiplicador a aplicar.
from_servingsnúmero, mayor que 0 y hasta 500uno de dosPara cuántas porciones está escrita la lista.
to_servingsnúmero, mayor que 0 y hasta 500uno de dosCuántas porciones se desean.

Pasa factor, o el par from_servings y to_servings.

A cambio: el factor usado, el ingredients reescalado en la forma get_recipe que devuelve, y scaled_count, rounded_count y unscaled_count.

get_recipe_translations

Lista los otros idiomas en los que se publicó una receta, usando el emparejamiento que el sitio publica por sí mismo.

ArgumentoTipoObligatorioQué hace
idcadena, de 1 a 300 caracteresEl id de una fila de una búsqueda o un listado.

A cambio: translations, cada una con la etiqueta language que el sitio publica y el url de esa versión, con translation_count y el url de la página francesa desde la que se leyeron.

Reescalado de las cantidades

Una cantidad se indica en la unidad que le conviene, así que una línea puede volver en una unidad diferente de la que usó la receta: 200 g multiplicados por veinte se leen 4 kg.

Con qué finura se puede dividir un ingrediente depende de qué es. Una baguette se puede cortar en dos, en tres o en cuatro; un huevo no se puede compartir. Una cantidad que aterriza entre las dos se redondea, y la receta reescalada entonces se aparta un poco de las proporciones de la original. La línea lleva rounded, y su note dice qué se hizo. Las cifras son la aritmética de este servidor, así que di que fueron recalculadas cuando las muestres. Una receta cuya página no indica número de raciones no puede adaptarse a un número de personas, y la respuesta lo dice.

Configuración

Todas las variables son opcionales. Configúralas en el bloque env de la configuración de tu cliente.

VariableDefaultQué hace
PTC_USER_AGENTla identidad del proyectoNombra tu aplicación al sitio, con una dirección donde se pueda contactar a una persona.
PTC_MIN_INTERVAL_MS1500Intervalo entre dos solicitudes, de 1000 a 60000.
PTC_TIMEOUT_MS20000Plazo para una solicitud, de 1000 a 120000.
PTC_MAX_RETRIES3Intentos después de un fallo transitorio, de 0 a 8.
PTC_CACHE_TTL_MS900000Cuánto tiempo permanece una página en memoria, de 0 a 86400000.
PTC_CACHE_MAX_ENTRIES200Páginas mantenidas en memoria a la vez, de 1 a 5000.
PTC_MAX_BODY_BYTES8000000La respuesta más grande leída completa, de 100000 a 64000000.
PTC_BUDGET_MS60000El tiempo que una lectura debe una respuesta, incluidos reintentos y esperas, de 5000 a 600000.
PTC_LOG_LEVELerrorsilent, error, info o debug, escritos en stderr.

Un valor fuera de su rango vuelve al predeterminado, y la razón se escribe en stderr.

Errores

Cada fallo lleva uno de seis códigos, un mensaje y, donde ayuda, una pista que indica el siguiente paso.

CódigoQué pasóQué hacer
not_foundEl sitio respondió y no tiene tal receta o página.Verifica el slug con list_categories, o el id con una búsqueda.
invalid_inputLos argumentos fueron rechazados antes de que saliera cualquier solicitud.Lee el mensaje, que nombra el argumento.
rate_limitedEl sitio pidió a este cliente que se ralentizara.Espera el número de segundos que indica la pista y vuelve a llamar con los mismos argumentos. La receta sigue ahí.
parse_failureLa página cargó y el contenido esperado estaba ausente.Repórtalo en el rastreador de problemas.
network_errorLa solicitud no se completó.Inténtalo de nuevo en breve.
timeoutLa solicitud superó su plazo o su presupuesto.Aumenta PTC_TIMEOUT_MS o PTC_BUDGET_MS, o pide menos filas.

Como biblioteca

La capa que lee el sitio se publica por separado, con su ritmo, su caché y sus errores, y sin protocolo adjunto.

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

const client = new PtitchefClient();
const { data, cached } = await client.listCategories();
console.log(data.results.length, cached);

listCategories, searchRecipes, browseRecipes, searchByIngredients y getRecipe responden cada una a { data, cached }, y lanzan un error que lleva uno de los seis códigos. El intervalo mínimo entre dos solicitudes también se aplica aquí.

Ritmo y atribución

Las solicitudes salen una a la vez con al menos un segundo y medio entre ellas, y el mínimo de un segundo se mantiene sin importar cómo esté configurado el servidor. El User-Agent siempre termina con la identidad del proyecto y una dirección donde se pueda contactar a una persona.

Cada resultado lleva la dirección de la página de la que se leyó, y source nombra el sitio. Las recetas, títulos y categorías pertenecen a Ptitchef y a los cocineros que los escribieron.

Este servidor MCP es un proyecto no oficial, sin afiliación con Ptitchef.

Privacidad

Este servidor no recopila nada sobre ti y no envía nada a su autor. Se ejecuta en tu máquina, contacta a www.ptitchef.com y nada más, mantiene sus respuestas en memoria mientras se ejecuta y no escribe nada en disco. PRIVACY.md indica qué lleva una solicitud y qué ajustes cambian cualquier parte de ello.

Desarrollo

npm install
npm run build:fixtures
npm test
npm run check

Las pruebas se ejecutan contra fixtures generados y no hacen ninguna solicitud de red. La suite en vivo, npm run test:live, hace una solicitud por ruta y se ejecuta cada noche contra el sitio mismo.

Contribuciones

Errores, preguntas e ideas van en el rastreador de problemas. Las solicitudes de extracción son bienvenidas; abrir un problema primero ayuda a acordar la forma del cambio. Ver CONTRIBUTING.md.

Licencia

MIT, ver LICENSE. Las recetas pertenecen a Ptitchef y a sus autores.


mcp-ptitchef (français)

Versión en inglés

Ptitchef es un sitio de cocina francés donde los cocineros publican sus recetas. Cada una da sus ingredientes, sus pasos, a menudo fotografiados uno a uno, sus tiempos de preparación y cocción, su costo, sus valores nutricionales y las calificaciones dejadas por sus lectores. El sitio clasifica sus recetas en un árbol de familias de ingredientes, y publica muchas en varios idiomas.

Este servidor conecta un cliente de conversación a este sitio. Se puede recorrer el árbol de categorías, buscar recetas por plato o por ingrediente, leer una categoría o una de las listas permanentes del sitio, preguntar qué se puede hacer con lo que hay en el refrigerador, leer una receta con sus ingredientes adaptados al número de comensales, y encontrar los otros idiomas en los que se ha publicado una receta. Sin clave de API, sin cuenta.

Instalación

Instalación en un clic

Install in Cursor Install in VS Code

Claude Code

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

Claude Desktop, Cursor y cualquier cliente con formato de configuración estándar

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

Se requiere Node 24 o más reciente, y no hay que configurar ninguna variable de entorno.

Con Docker

{
  "mcpServers": {
    "ptitchef": {
      "command": "docker",
      "args": ["run", "-i", "--rm", "ghcr.io/smeet666/mcp-ptitchef:1.0.1"]
    }
  }
}

-i mantiene la entrada estándar abierta, que es el canal del protocolo, y -t se omite porque un TTY reescribe el flujo. El contenedor necesita acceso HTTPS saliente a www.ptitchef.com, y nada más: sin volumen, sin puerto, sin identificador.

Bundle, sin npm

Descargue mcp-ptitchef-1.0.1.mcpb desde la última publicación y ábralo. Un cliente que gestiona bundles MCP lo instala solo, sin npm y sin archivo de configuración que modificar. El bundle lleva sus dependencias, por lo que nada se descarga en la instalación.

Lo que se puede pedir

  • « ¿Qué recetas de col rizada tiene Ptitchef? »
  • « ¿Qué puedo cocinar con calabacines, feta y menta? »
  • « Léeme este gratinado para ocho personas. »
  • « Muéstrame las recetas mejor calificadas del sitio. »
  • « ¿Esta receta existe también en español? »

Ptitchef es un sitio francés, por lo que sus recetas se encuentran en francés. El camino habitual va de una lista a una receta: una línea lleva un id, y get_recipe retoma ese identificador.

Las herramientas

HerramientaQué hace
list_categoriesRecorre el árbol de familias de ingredientes del sitio.
search_recipesEncuentra recetas por plato o por ingrediente.
browse_recipesLee una categoría página por página, o una lista permanente.
search_by_ingredientsResponde con lo que se puede hacer con lo que un cocinero ya tiene.
get_recipeLee una receta, adaptada a un número de porciones si se pide.
scale_ingredientsAdapta cualquier lista de ingredientes, sin consulta al sitio.
get_recipe_translationsLista los otros idiomas en los que se ha publicado una receta.

Empiece por list_categories. El sitio le da las direcciones correctas, lo que evita construir una a mano: una dirección construida así lleva a la página de inicio del sitio.

list_categories

Lee el árbol bajo el cual el sitio clasifica sus recetas. Llamado sin argumento, devuelve las familias; vuelva a dar el slug de una familia en family para leer lo que contiene.

ArgumentoTipoRequeridoQué hace
familycadena, 1 a 80 caracteresnoEl slug de una familia, para leer las categorías debajo.
limitentero, 1 a 200, defecto 20noLíneas a servir.

En retorno: líneas que llevan slug, que se vuelve a dar en family o en category ; title en los términos del sitio ; url ; description, null donde la página no lleva ninguna ; y sample_children para las categorías del nivel inferior.

search_recipes

Busca recetas por plato o por ingrediente.

ArgumentoTipoRequeridoQué hace
querycadena, 1 a 120 caracteresUn plato o un ingrediente, en francés.
limitentero, 1 a 100, defecto 20noLíneas a servir.

En retorno: results, líneas que llevan id, title, url, image_url, rating, rating_count y review_count, un contador que la página no imprime que vale null. El envoltorio dice cómo respondió el sitio: kind vale category cuando la respuesta viene de una página de categoría, cuyo total_available cuenta toda la categoría, y free_text cuando el sitio respondió a su manera en una sola página, donde el total cuenta las líneas servidas. Estos dos totales cuentan cosas diferentes. kind también vale guide para un dossier que el sitio ha escrito a mano, donde las líneas llevan un nombre y una dirección sin que exista ningún total. También vienen result_count, rows_seen, page, single_page y url. Una lista marcada single_page cuyo total supera rows_seen tiene un resto que el sitio cuenta y no sirve.

browse_recipes

Lee una categoría página por página, o una de las listas permanentes del sitio.

ArgumentoTipoRequisitoQué hace
categorycadena, de 1 a 120 caracteresnoUn slug de categoría, publicado por list_categories.
listinglatest, top_rated o most_viewednoUna lista permanente, leída en lugar de una categoría.
pageentero, de 1 a 1000noLa página de categoría a leer. Una lista permanente solo tiene una.
limitentero, de 1 a 100, por defecto 20noLíneas a servir.

En retorno: el envoltorio que devuelve search_recipes, con kind valiendo category, standing o topic. page es la página que el sitio ha servido, que es la primera de nuevo cuando la página solicitada supera la última.

search_by_ingredients

Responde con lo que se puede hacer con los ingredientes que un cocinero ya tiene.

ArgumentoTipoRequisitoQué hace
ingredientsmatriz de 1 a 5 cadenas, de 1 a 60 caracteresLos ingredientes disponibles, en francés.
limitentero, de 1 a 100, por defecto 20noLíneas a servir.

En retorno: el envoltorio de las otras listas, con kind valiendo fridge. El sitio hace corresponder su propio vocabulario, por lo que un ingrediente que escribe de otra manera reduce la respuesta en lugar de ampliarla.

get_recipe

Lee una receta completa y adapta sus ingredientes cuando se da un número de porciones.

ArgumentoTipoRequisitoQué hace
idcadena, de 1 a 300 caracteresEl id de una línea de búsqueda o de lista.
servingsentero, de 1 a 500noAdapta los ingredientes a este número de porciones.

En retorno: title, url, description, image_url, category, cuisine, difficulty en los términos del sitio, author, published, modified, rating, rating_count, review_count, prep_minutes, cook_minutes, total_minutes, nutrition tal como se publica para la porción que nombra, estimated_cost, keywords, faq y translations, cada uno null donde la página no indica nada. steps lleva el método una línea por paso, y illustrated_steps los mismos pasos con la fotografía que el sitio ha tomado de cada uno. yield dice para qué está escrita la receta y hacia qué se ha adaptado. Cada ingrediente lleva scaling, que vale scaled, rounded o unscaled: léalo antes de citar una cantidad, rounded habiendo sido movida para seguir siendo utilizable en la cocina.

scale_ingredients

Aplica la misma aritmética a cualquier lista de ingredientes en francés, sin consulta al sitio.

ArgumentoTipoRequisitoQué hace
ingredientsmatriz de 1 a 100 cadenas, hasta 300 caracteresLas líneas a adaptar, en francés.
factornúmero, mayor que 0 hasta 100uno de los dosEl multiplicador a aplicar.
from_servingsnúmero, mayor que 0 hasta 500uno de los dosEl número de porciones de la lista original.
to_servingsnúmero, mayor que 0 hasta 500uno de los dosEl número de porciones deseado.

Pase factor, o el par from_servings y to_servings.

En retorno: el factor empleado, los ingredients adaptados en la forma que devuelve get_recipe, y scaled_count, rounded_count y unscaled_count.

get_recipe_translations

Lista los otros idiomas en los que se ha publicado una receta, según el emparejamiento que el propio sitio publica.

ArgumentoTipoRequisitoQué hace
idcadena, de 1 a 300 caracteresEl id de una línea de búsqueda o de lista.

En retorno: translations, cada una llevando la etiqueta language que el sitio publica y el url de esa versión, con translation_count y el url de la página francesa de donde se han leído.

La adaptación de las cantidades

Una cantidad se expresa en la unidad que le conviene. Después de la adaptación, una línea puede aparecer en otra unidad que la de la receta: 200 g multiplicados por veinte dan 4 kg.

La fineza con la que se corta un ingrediente depende de su naturaleza. Una baguette se corta en dos, en tres o en cuatro; un huevo no se divide. Una cantidad que cae entre los dos se redondea, y la receta adaptada se aleja entonces un poco de las proporciones de la original. La línea lleva rounded, y su note dice lo que se ha hecho.

Los números son la aritmética de este servidor, así que diga que han sido recalculados cuando los muestre. Una receta cuya página no indica ningún número de porciones no puede llevarse a un número de comensales, y la respuesta lo dice.

Configuración

Cada variable es opcional. Se colocan en el bloque env de la configuración del cliente.

VariablePor defectoQué hace
PTC_USER_AGENTla identidad del proyectoNombra su aplicación ante el sitio, con una dirección donde contactar a una persona.
PTC_MIN_INTERVAL_MS1500Intervalo entre dos solicitudes, de 1000 a 60000.
PTC_TIMEOUT_MS20000Tiempo de espera de una solicitud, de 1000 a 120000.
PTC_MAX_RETRIES3Intentos después de un fallo pasajero, de 0 a 8.
PTC_CACHE_TTL_MS900000Duración durante la cual una página permanece en memoria, de 0 a 86400000.
PTC_CACHE_MAX_ENTRIES200Páginas guardadas en memoria a la vez, de 1 a 5000.
PTC_MAX_BODY_BYTES8000000La respuesta más grande leída completa, de 100000 a 64000000.
PTC_BUDGET_MS60000El tiempo en el que una lectura debe devolver una respuesta, reintentos y esperas incluidos, de 5000 a 600000.
PTC_LOG_LEVELerrorsilent, error, info o debug, escrito en la salida de error.

Un valor fuera de su rango vuelve al valor por defecto, y la razón se escribe en la salida de error.

Errores

Cada fallo lleva uno de los seis códigos, un mensaje y, cuando ayuda, una indicación del siguiente paso.

CódigoLo que ha sucedidoQué hacer
not_foundEl sitio ha respondido y no tiene ni esta receta ni esta página.Verifique el slug con list_categories, o el identificador con una búsqueda.
invalid_inputLos argumentos han sido rechazados antes de cualquier solicitud.Lea el mensaje, que nombra el argumento.
rate_limitedEl sitio pide a este cliente que reduzca la velocidad.Espere los segundos indicados y vuelva a llamar con los mismos argumentos. La receta sigue ahí.
parse_failureLa página ha cargado y el contenido esperado está ausente.Infórmelo en el seguimiento de incidentes.
network_errorLa solicitud no ha llegado a buen término.Reintente en breve.
timeoutLa solicitud ha superado su tiempo de espera o su presupuesto.Aumente PTC_TIMEOUT_MS o PTC_BUDGET_MS, o solicite menos líneas.

Como biblioteca

La capa que lee el sitio se publica sola, con su ritmo, su caché y sus errores, sin protocolo adjunto.

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

const client = new PtitchefClient();
const { data, cached } = await client.listCategories();
console.log(data.results.length, cached);

listCategories, searchRecipes, browseRecipes, searchByIngredients y getRecipe responden cada uno { data, cached }, y lanzan un error que lleva uno de los seis códigos. El mínimo entre dos solicitudes también se aplica aquí.

Ritmo y atribución

Las solicitudes salen una a una con al menos un segundo y medio entre ellas, y el mínimo de un segundo se mantiene independientemente de la configuración. El User-Agent termina siempre con la identidad del proyecto y una dirección donde contactar a una persona.

Cada resultado lleva la dirección de la página de donde se ha leído, y source nombra el sitio. Las recetas, los títulos y las categorías pertenecen a Ptitchef y a los cocineros que las han escrito.

Este MCP es un proyecto no oficial, sin afiliación con Ptitchef.

Confidencialidad

Este servidor no recopila nada sobre usted y no envía nada a su autor. Se ejecuta en su máquina, solo se conecta a www.ptitchef.com, guarda sus respuestas en memoria mientras se ejecuta y no escribe nada en el disco. PRIVACY.md dice lo que una solicitud lleva consigo y qué ajustes cambian eso.

Desarrollo

npm install
npm run build:fixtures
npm test
npm run check

Las pruebas se ejecutan sobre fixtures generados y no emiten ninguna solicitud. La suite en vivo, npm run test:live, emite una solicitud por ruta y se ejecuta cada noche contra el propio sitio.

Contribuir

Las anomalías, las preguntas y las ideas tienen su lugar en el seguimiento de incidentes. Las propuestas de modificación son bienvenidas; abrir un ticket primero ayuda a ponerse de acuerdo sobre la forma del cambio. Ver CONTRIBUTING.md.

Licencia

MIT, ver LICENSE. Las recetas pertenecen a Ptitchef y a sus autores.