Marmiton

Busca recetas de Marmiton, lee ingredientes y pasos, y ajusta las cantidades a cualquier número de porciones.

Documentación

mcp-marmiton

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

Marmiton es el sitio de cocina francés más grande, donde los cocineros caseros publican sus recetas desde 1999. Cada una incluye sus ingredientes con sus cantidades, los pasos a seguir, los tiempos de preparación y cocción, el número de porciones para el que está escrita y las valoraciones que las personas que la hicieron dejaron atrás.

Este servidor conecta un cliente de chat a ese sitio. Puedes buscar sus recetas por plato o por ingrediente, leer una completa con sus ingredientes y sus pasos, y reescalar las cantidades al número de personas en tu mesa, con cada línea diciendo si la cifra es exacta o fue ajustada para seguir siendo utilizable en una cocina. 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 marmiton -- npx -y mcp-marmiton

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

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

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

Con Docker

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

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

Paquete, sin npm

Descarga mcp-marmiton-2.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, por lo que no se descarga nada en el momento de la instalación.

Lo que puedes pedir

  • « Trouve-moi une recette de tarte aux pommes. »
  • "Léeme esa receta para seis personas en lugar de cuatro."
  • "¿Qué puedo hacer con calabacines y chèvre?"
  • "Aquí tienes una receta que copié de un libro, escálala por 1.5 para mí."
  • "¿Cuánto tarda en cocinarse la segunda?"

Marmiton es un sitio francés, por lo que sus recetas se encuentran en francés: tarte aux pommes, poulet curry coco. El camino habitual va de una búsqueda a una lectura: search_recipes nombra un id, y get_recipe toma ese id.

Herramientas

HerramientaQué hace
search_recipesEncuentra recetas por plato o por ingrediente.
get_recipeLee una receta, reescalada a un número de porciones si se pide.
scale_ingredientsReescala cualquier lista de ingredientes, sin solicitar al sitio.

El servidor solo lee. No publica nada en Marmiton.

search_recipes

Busca las recetas por un plato o un ingrediente. Marmiton coincide con las letras iniciales de una palabra, por lo que una consulta devuelve lo que el sitio clasificó para ella, y la respuesta indica cuando los títulos no contienen ninguna de las palabras solicitadas.

ArgumentoTipoObligatorioQué hace
querycadena, hasta 200 caracteresQué buscar, en francés.
limitentero, de 1 a 30, por defecto 10noRecetas a servir de esta página de resultados.

A cambio: filas que llevan id, que get_recipe toma; title; url; y image_url, que es null para una receta publicada sin foto. Junto a ellas vienen result_count y total_available, las recetas en esta página antes de aplicar limit. El robots.txt de Marmiton no permite paginar a través de los resultados de búsqueda, por lo que una página es lo que una búsqueda lee: afina la consulta para ver otras recetas.

get_recipe

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

ArgumentoTipoObligatorioQué hace
idcadena de dígitosuno de dosEl id de la receta de Marmiton, como lo devolvió search_recipes.
urluna URL de marmiton.orguno de dosLa dirección de la receta, usada cuando id está ausente.
servingsnúmero, mayor que 0 y hasta 500noReescala las cantidades a este número de porciones.

A cambio: title, url, ingredients, steps, prep_minutes, cook_minutes, total_minutes, category, author, rating y nutrition, cada uno null cuando la página no publica ninguno. yield dice para qué fue escrita la receta y a qué fue reescalada: original_count, original_text, requested, unit para lo que se cuenta, y factor para el multiplicador aplicado. Cada ingrediente lleva original, text, amount, amountMax para un rango, unit, y scaling, que se lee scaled, rounded o unscaled. Las cifras son aritmética de este servidor, así que di que fueron recalculadas cuando las muestres. nutrition describe la receta tal como fue publicada, en su propio número de porciones.

scale_ingredients

Aplica la misma aritmética a cualquier lista de líneas de ingredientes, sin solicitar al sitio, por lo que funciona con una receta copiada de un libro o de un cuaderno familiar.

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, los ingredients reescalados en la forma que get_recipe devuelve, y scaled_count, rounded_count y unscaled_count, que cuentan las líneas cuyo valor el redondeo movió.

Escalado de las cantidades

Cada ingrediente vuelve con una marca scaling que dice qué pudo hacer el reescalado con su cantidad.

MarcaSignificadoEjemplo
scaledEl valor es el producto en sí.3 oeufs ×2 → 6 oeufs
roundedEl valor se movió para seguir siendo utilizable.25 cl de lait ×0.667 → 17 cl de lait
unscaledNo lleva cantidad, por lo que se deja tal como está escrito.sel, coriandre

Una cantidad se expresa en la unidad que le conviene, por lo 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.

Lo finamente que 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 cae entre los dos se redondea, y la receta reescalada se aleja entonces un poco de las proporciones del original. La línea lleva rounded, y su note dice qué se hizo.

Configuración

Toda variable es opcional. Establécelas en el bloque env de la configuración de tu cliente.

VariablePor defectoQué hace
MARMITON_USER_AGENTla identidad del proyectoNombra tu aplicación ante Marmiton, con una dirección donde se pueda contactar a una persona.
MARMITON_MIN_INTERVAL_MS1000Intervalo entre dos solicitudes, de 500 a 60000. Una cifra por debajo del mínimo se rechaza y se usa esta.
MARMITON_TIMEOUT_MS15000Plazo para una solicitud, de 1000 a 120000.
MARMITON_MAX_RETRIES3Intentos tras un fallo transitorio, de 0 a 10.
MARMITON_CACHE_TTL_MS900000Cuánto tiempo permanece una página en memoria, de 0 a 86400000.
MARMITON_CACHE_MAX_ENTRIES200Páginas retenidas en memoria a la vez, de 0 a 10000.
MARMITON_LOG_LEVELerrorsilent, error, info o debug, escritos en stderr.

Un valor fuera de su rango vuelve al valor por defecto, 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 nombra el siguiente movimiento.

CódigoQué pasóQué hacer
not_foundMarmiton respondió y no tiene tal receta.Comprueba el id con search_recipes.
invalid_inputLos argumentos fueron rechazados antes de enviar cualquier solicitud.Lee el mensaje, que nombra el argumento.
rate_limitedMarmiton pidió a este cliente que se ralentizara.Espera el número de segundos que nombra la pista y vuelve a llamar con los mismos argumentos. La receta sigue ahí.
parse_failureLa página se cargó y faltaba el contenido esperado.Repórtalo en el rastreador de problemas.
network_errorLa solicitud no se completó.Inténtalo de nuevo en breve.
timeoutLa solicitud superó su plazo.Aumenta MARMITON_TIMEOUT_MS.

Como biblioteca

La capa que lee Marmiton se publica por separado, con su ritmo, su caché y sus errores, y sin ningún protocolo adjunto.

import { MarmitonClient } from "mcp-marmiton/client";

const client = new MarmitonClient();
const { data, cached } = await client.getRecipe({ id: "18257" });
console.log(data.title, data.ingredients.length, cached);

search y getRecipe responden cada uno { 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 se envían de una en una con un intervalo mínimo entre ellas, y ese mínimo 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 puede contactar a una persona. Todo se lee del schema.org JSON-LD que Marmiton publica para máquinas, y las rutas que su robots.txt prohíbe se dejan intactas.

Cada resultado incluye el título y la dirección de la receta, y get_recipe incluye el autor cuando la página lo nombra, junto con attribution, el título y la dirección escritos en una sola línea.

Las recetas pertenecen a Marmiton y a los cocineros que las escribieron. Este servidor MCP es un proyecto no oficial, sin afiliación con Marmiton.

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.marmiton.org y nada más, guarda sus respuestas en memoria mientras se ejecuta y no escribe nada en el 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 accesorios generados y no hacen ninguna solicitud de red. El conjunto 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 Marmiton y a sus autores.


mcp-marmiton (francés)

Versión en inglés

Marmiton es el sitio de cocina francés más grande, donde cocineros publican sus recetas desde 1999. Cada una da sus ingredientes con sus cantidades, los pasos a seguir, los tiempos de preparación y cocción, el número de porciones para el que está escrita, y las calificaciones dejadas por quienes la han hecho.

Este servidor conecta un cliente de conversación a este sitio. Se pueden buscar recetas por plato o por ingrediente, leer una completa con sus ingredientes y sus pasos, y adaptar las cantidades al número de comensales, cada línea diciendo si el número es exacto o si se ha desplazado para seguir siendo utilizable en la cocina. 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 marmiton -- npx -y mcp-marmiton

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

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

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

Con Docker

{
  "mcpServers": {
    "marmiton": {
      "command": "docker",
      "args": ["run", "-i", "--rm", "ghcr.io/smeet666/mcp-marmiton:2.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.marmiton.org, y nada más: sin volúmenes, sin puertos, sin identificadores.

Bundle, sin npm

Descargue mcp-marmiton-2.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 tanto nada se descarga en la instalación.

Lo que se puede pedir

  • «Encuéntrame una receta de tarta de manzana.»
  • «Léeme esta receta para seis personas en lugar de cuatro.»
  • «¿Qué puedo hacer con calabacines y queso de cabra?»
  • «Aquí hay una receta copiada de un libro, multiplícala por 1,5.»
  • «¿Cuánto tiempo de cocción para la segunda?»

Marmiton es un sitio francés, por lo tanto sus recetas se encuentran en francés: tarte aux pommes, poulet curry coco. El camino habitual va de una búsqueda a una lectura: search_recipes nombra un id, y get_recipe retoma ese identificador.

Las herramientas

HerramientaLo que hace
search_recipesEncuentra recetas por plato o por ingrediente.
get_recipeLee una receta, adaptada a un número de porciones si se pide.
scale_ingredientsAdapta cualquier lista de ingredientes, sin consulta al sitio.

El servidor solo lee. No publica nada en Marmiton.

search_recipes

Busca recetas por plato o por ingrediente. Marmiton hace coincidir las primeras letras de una palabra, por lo tanto una consulta devuelve lo que el sitio ha clasificado para ella, y la respuesta señala cuando los títulos no llevan ninguna de las palabras pedidas.

ArgumentoTipoRequeridoLo que hace
querycadena, hasta 200 caracteresLo que se busca, en francés.
limitentero, 1 a 30, defecto 10noRecetas a servir desde esta página de resultados.

En retorno: líneas que llevan id, que get_recipe retoma; title; url; y image_url, null para una receta publicada sin foto. Vienen también result_count y total_available, las recetas de esta página antes de la aplicación de limit. El robots.txt de Marmiton prohíbe paginar los resultados de búsqueda, por lo tanto una búsqueda lee una página: afine la consulta para ver otras recetas.

get_recipe

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

ArgumentoTipoRequeridoLo que hace
idcadena de dígitosuno de los dosEl identificador Marmiton devuelto por search_recipes.
urluna dirección marmiton.orguno de los dosLa dirección de la receta, usada a falta de id.
servingsnúmero, más de 0 hasta 500noAdapta las cantidades a este número de porciones.

En retorno: title, url, ingredients, steps, prep_minutes, cook_minutes, total_minutes, category, author, rating y nutrition, cada uno null cuando la página no publica ninguno. yield dice para qué está escrita la receta y hacia qué se ha adaptado: original_count, original_text, requested, unit para lo que se cuenta, y factor para el multiplicador aplicado. Cada ingrediente lleva original, text, amount, amountMax para un intervalo, unit, y scaling, que vale scaled, rounded o unscaled. Los números son la aritmética de este servidor, por lo tanto diga que han sido recalculados cuando los muestre. nutrition describe la receta tal como fue publicada, para su propio número de porciones.

scale_ingredients

Aplica la misma aritmética a cualquier lista de ingredientes, sin consulta al sitio, por lo tanto a una receta copiada de un libro o de un cuaderno familiar.

ArgumentoTipoRequeridoLo que hace
ingredientsmatriz de 1 a 100 cadenas, hasta 300 caracteresLas líneas a adaptar, en francés.
factornúmero, más de 0 hasta 100uno de los dosEl multiplicador a aplicar.
from_servingsnúmero, más de 0 hasta 500uno de los dosEl número de porciones para el que está escrita la lista.
to_servingsnúmero, más de 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, que cuentan las líneas cuyo redondeo ha desplazado el valor.

La adaptación de las cantidades

Cada ingrediente vuelve con una bandera scaling que dice lo que la adaptación ha podido hacer con su cantidad.

BanderaLo que significaEjemplo
scaledEl valor es el producto mismo.3 oeufs ×2 → 6 oeufs
roundedEl valor se ha desplazado para seguir siendo utilizable.25 cl de lait ×0,667 → 17 cl de lait
unscaledNo lleva ninguna cantidad, se deja tal cual.sel, coriandre

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 finura con la que un ingrediente se corta 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 las 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.

Configuración

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

VariableDefectoLo que hace
MARMITON_USER_AGENTla identidad del proyectoNombra su aplicación ante Marmiton, con una dirección donde contactar a una persona.
MARMITON_MIN_INTERVAL_MS1000Intervalo entre dos solicitudes, de 500 a 60000. Un valor por debajo del mínimo se rechaza en favor de este.
MARMITON_TIMEOUT_MS15000Tiempo de espera de una solicitud, de 1000 a 120000.
MARMITON_MAX_RETRIES3Intentos después de un fallo pasajero, de 0 a 10.
MARMITON_CACHE_TTL_MS900000Duración durante la cual una página permanece en memoria, de 0 a 86400000.
MARMITON_CACHE_MAX_ENTRIES200Páginas guardadas en memoria a la vez, de 0 a 10000.
MARMITON_LOG_LEVELerrorsilent, error, info o debug, escrito en la salida de error.
Un valor fuera de su rango vuelve al valor predeterminado, 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 sucedióQué hacer
not_foundMarmiton respondió y no tiene esta receta.Verifique el identificador con search_recipes.
invalid_inputLos argumentos fueron rechazados antes de cualquier solicitud.Lea el mensaje, que nombra el argumento.
rate_limitedMarmiton 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 cargó y el contenido esperado está ausente.Repórtelo en el seguimiento de incidentes.
network_errorLa solicitud no se completó.Reintente en breve.
timeoutLa solicitud superó su tiempo de espera.Aumente MARMITON_TIMEOUT_MS.

Como biblioteca

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

import { MarmitonClient } from "mcp-marmiton/client";

const client = new MarmitonClient();
const { data, cached } = await client.getRecipe({ id: "18257" });
console.log(data.title, data.ingredients.length, cached);

search y getRecipe responden cada uno { data, cached }, y lanzan un error con uno de los seis códigos. El intervalo mínimo entre dos solicitudes también se aplica aquí.

Ritmo y atribución

Las solicitudes se envían una a una con un intervalo mínimo entre ellas, y este mínimo se mantiene independientemente de la configuración. El User-Agent siempre termina con la identidad del proyecto y una dirección para contactar a una persona. Todo se lee del JSON-LD schema.org que Marmiton publica para las máquinas, y las rutas que su robots.txt prohíbe se dejan en paz.

Cada resultado incluye el título y la dirección de la receta, y get_recipe incluye el autor cuando la página lo nombra, así como attribution, el título y la dirección escritos en una línea.

Las recetas pertenecen a Marmiton y a los cocineros que las escribieron. Este MCP es un proyecto no oficial, sin afiliación con Marmiton.

Privacidad

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.marmiton.org, guarda sus respuestas en memoria mientras se ejecuta y no escribe nada en el disco. PRIVACY.md dice qué lleva una solicitud 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 sitio mismo.

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 acordar la forma del cambio. Ver CONTRIBUTING.md.

Licencia

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