Wikibooks Cookbook

Busca en el Wikibooks Cookbook, lee una receta y reescala a cualquier número de porciones.

Documentación

mcp-wikibooks-cookbook

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

El Cookbook es la colección de recetas de los Wikilibros en inglés, un proyecto de Wikimedia. Miles de recetas están escritas y mantenidas allí de forma abierta, cada una con sus ingredientes, el equipo que requiere, sus pasos, los consejos y variaciones que sus autores añadieron, y las categorías bajo las que se archiva: una cocina, un tipo de plato, un ingrediente principal. Las páginas se publican bajo Creative Commons Attribution-ShareAlike 4.0.

Este servidor conecta un cliente de chat con esa colección. Puedes buscar las recetas por plato o por ingrediente, listarlas por cocina, tipo de plato o ingrediente principal, leer una con sus ingredientes reescalados al número de personas en tu mesa, y reescalar cualquier lista de ingredientes propia. 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 wikibooks-cookbook -- npx -y mcp-wikibooks-cookbook

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

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

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

Con Docker

{
  "mcpServers": {
    "wikibooks-cookbook": {
      "command": "docker",
      "args": ["run", "-i", "--rm", "ghcr.io/smeet666/mcp-wikibooks-cookbook: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 api.wikimedia.org, y nada más: sin volumen, sin puerto, sin credencial.

Paquete, sin npm

Descarga mcp-wikibooks-cookbook-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, así que no se descarga nada en el momento de la instalación.

Lo que puedes preguntar

  • "Encuéntrame una receta de carbonara en el Cookbook."
  • "Léela para seis personas en lugar de cuatro."
  • "¿Qué sopas tailandesas tiene la colección?"
  • "¿Qué recetas están basadas en lentejas?"
  • "Escala esta lista de ingredientes por 2.5 para mí."

El camino habitual va de una búsqueda a una lectura: una fila lleva un id, la clave de página, y get_recipe toma esa clave.

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 wiki.
list_recipesLista recetas por cocina, tipo de plato o ingrediente principal.

search_recipes

Busca en el Cookbook, ya sea en todo el texto de sus páginas o solo en sus títulos.

ArgumentoTipoObligatorioQué hace
querycadena, de 1 a 300 caracteresUn plato, como carbonara, o un ingrediente, como guanciale.
searchtext o title, por defecto textnotext lee toda la página; title coincide solo con el nombre de la página.
limitentero, de 1 a 50, por defecto 10noFilas a servir.

A cambio: filas que llevan id, la clave de página que get_recipe toma; title; url; image_url; description, la breve glosa que el wiki mantiene para una página; y excerpt, el pasaje coincidente con el marcado de resaltado eliminado. Cada uno de los últimos tres es null cuando la búsqueda no ofreció ninguno. total_available es siempre null: la ruta de búsqueda no publica total ni paginación, así que result_count cuenta las filas que esta llamada devolvió.

get_recipe

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

ArgumentoTipoObligatorioQué hacer
idcadena, de 1 a 300 caracteresLa clave de página, como Cookbook:Spaghetti_alla_Carbonara.
servingsentero, de 1 a 500noReescala los ingredientes a este número de porciones.
max_description_charsentero, de 100 a 20000, por defecto 1200noCuánta prosa de la página servir.

A cambio: title, url, ingredients, equipment, steps, tips para las notas y variaciones que la página publica, prep_minutes, cook_minutes, total_minutes, time_text en las propias palabras de la página, time_phases, category y categories para cada categoría bajo la que la página se archiva. Una cifra que la página no indica es null. id nombra la página que se leyó, que difiere de la clave solicitada después de una redirección, y redirected_from entonces nombra la clave que llevó allí. yield dice para qué fue escrita la receta y a qué fue reescalada, y cada ingrediente lleva scaling, que lee scaled, rounded o unscaled.

scale_ingredients

Aplica la misma aritmética a cualquier lista de líneas de ingredientes, sin solicitar al wiki.

ArgumentoTipoObligatorioQué hacer
ingredientsmatriz de 1 a 100 cadenas, hasta 300 caracteresLas líneas a reescalar.
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 que get_recipe devuelve, y scaled_count, rounded_count y unscaled_count.

list_recipes

Lista recetas según las categorías bajo las que el Cookbook las archiva. Los argumentos se combinan, y la respuesta dice qué búsqueda se construyó a partir de ellos.

ArgumentoTipoObligatorioQué hacer
cuisinecadena, hasta 80 caracteresnoUna cocina o un país, como Italian o Thai.
dish_typecadena, hasta 80 caracteresnoUn tipo de plato, como soup, dessert o bread.
main_ingredientcadena, hasta 80 caracteresnoEl ingrediente en el que se basa una receta.
limitentero, de 1 a 50, por defecto 15noFilas a servir.

A cambio: las filas que search_recipes devuelve, con query nombrando la búsqueda que este servidor construyó a partir de los argumentos, y cada argumento repetido o null donde se omitió.

Reescalado de las cantidades

Una cantidad se expresa 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 hogaza se puede cortar en dos, en tres o en cuatro; un huevo no se puede compartir. Una cantidad que cae entre ambos se redondea, y la receta reescalada se aparta entonces un poco de las proporciones del original. La línea lleva rounded, y su nota dice qué se hizo.

Las cifras son la aritmética de este servidor, así que di que se recalcularon cuando las muestres. Una receta cuya página no indica ningún número de porciones no se puede ajustar a un número de personas, y la respuesta lo dice.

Licencia y atribución

Las páginas del Cookbook se publican bajo Creative Commons Attribution-ShareAlike 4.0. Repetir una receta significa acreditar a Wikilibros y la página de la que proviene, y compartir lo que se construye sobre ella bajo la misma licencia. get_recipe devuelve tanto license como la página url, así que una respuesta lleva el crédito consigo.

Configuración

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

VariablePor defectoQué hace
WB_USER_AGENTla identidad del proyectoNombra tu aplicación a Wikimedia, con una dirección donde se pueda contactar a una persona.
WB_MIN_INTERVAL_MS1000Intervalo entre dos solicitudes, de 500 a 60000.
WB_TIMEOUT_MS20000Plazo para una solicitud, de 1000 a 120000.
WB_MAX_RETRIES3Intentos después de un fallo transitorio, de 0 a 8.
WB_CACHE_TTL_MS900000Cuánto tiempo permanece una página en memoria, de 0 a 86400000.
WB_CACHE_MAX_ENTRIES200Páginas mantenidas en memoria a la vez, de 1 a 5000.
WB_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 paso.

CódigoQué ocurrióQué hacer
not_foundEl wiki respondió y no contiene esa página.Comprueba la clave de página con search_recipes.
invalid_inputLos argumentos fueron rechazados antes de enviar ninguna solicitud.Lee el mensaje, que nombra el argumento.
rate_limitedWikimedia pidió a este cliente que fuera más lento.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 se cargó y el contenido esperado estaba ausente.Repórtalo en el rastreador de incidencias.
network_errorLa solicitud no se completó.Inténtalo de nuevo en breve.
timeoutLa solicitud superó su plazo.Aumenta WB_TIMEOUT_MS, o pide menos filas.

Como biblioteca

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

import { WikibooksClient } from "mcp-wikibooks-cookbook/client";

const client = new WikibooksClient();
const { data, cached } = await client.getRecipe("Cookbook:Spaghetti_alla_Carbonara");
console.log(data.title, data.ingredients.length, cached);

search y getRecipe responden cada uno 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 de una en una con al menos un segundo entre ellas, y el intervalo de medio 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 puede contactar a una persona.

Las lecturas van a api.wikimedia.org, el host que Wikimedia documenta y mantiene para desarrolladores. Cada resultado lleva la dirección de la página desde la que se leyó y la licencia bajo la que se publica.

Este servidor MCP es un proyecto no oficial, sin afiliación con Wikimedia ni con la comunidad de Wikibooks.

Privacidad

Este servidor no recopila nada sobre ti y no envía nada a su autor. Se ejecuta en tu máquina, contacta a api.wikimedia.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. La suite en vivo, npm run test:live, hace una solicitud por ruta y se ejecuta cada noche contra el propio servicio.

Contribuciones

Errores, preguntas e ideas van en el rastreador de incidencias. Las solicitudes de extracción son bienvenidas; abrir una incidencia primero ayuda a acordar la forma del cambio. Consulta CONTRIBUTING.md.

Licencia

MIT para el código propio de este servidor, consulta LICENSE. Las páginas del Cookbook pertenecen a sus autores y a la comunidad de Wikibooks, bajo CC BY-SA 4.0.


mcp-wikibooks-cookbook (français)

Versión en inglés

El Cookbook es la colección de recetas de los Wikibooks en inglés, un proyecto de Wikimedia. Miles de recetas están escritas y mantenidas abiertamente, cada una con sus ingredientes, el equipo que requiere, sus pasos, los consejos y variantes que sus autores han añadido, y las categorías bajo las que se clasifica: una cocina, un tipo de plato, un ingrediente principal. Las páginas se publican bajo Creative Commons Atribución-CompartirIgual 4.0.

Este servidor conecta un cliente de conversación con esta colección. Se pueden buscar recetas por plato o por ingrediente, listarlas por cocina, tipo de plato o ingrediente principal, leer una con sus ingredientes adaptados al número de comensales, y adaptar cualquier lista de ingredientes. 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 wikibooks-cookbook -- npx -y mcp-wikibooks-cookbook

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

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

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

Con Docker

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

Paquete, sin npm

Descarga mcp-wikibooks-cookbook-2.0.1.mcpb desde la última publicación y ábrelo. Un cliente que gestiona paquetes MCP lo instala solo, sin npm y sin modificar ningún archivo de configuración. El paquete incluye sus dependencias, por lo que no se descarga nada durante la instalación.

Lo que se puede pedir

  • «Encuéntrame una receta de carbonara en el Cookbook.»
  • «Léela para seis personas en lugar de cuatro.»
  • «¿Qué sopas tailandesas contiene la colección?»
  • «¿Qué recetas están basadas en lentejas?»
  • «Multiplica esta lista de ingredientes por 2,5.»

El camino habitual va de una búsqueda a una lectura: una línea lleva un id, la clave de página, y get_recipe retoma esa clave.

Las herramientas

HerramientaQué 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 consultar al wiki.
list_recipesLista recetas por cocina, tipo de plato o ingrediente principal.

search_recipes

Busca en el Cookbook, ya sea en todo el texto de sus páginas o solo en sus títulos.

ArgumentoTipoRequeridoQué hace
querycadena, de 1 a 300 caracteresUn plato, como carbonara, o un ingrediente, como guanciale.
searchtext o title, por defecto textnotext lee toda la página; title solo coincide con el nombre de la página.
limitentero, de 1 a 50, por defecto 10noLíneas a servir.

A cambio: líneas que llevan id, la clave de página que get_recipe retoma; title; url; image_url; description, la breve glosa que el wiki guarda para una página; y excerpt, el pasaje correspondiente sin su marcado de resaltado. Cada uno de los tres últimos vale null donde la búsqueda no ha propuesto ninguno. total_available siempre vale null: la ruta de búsqueda no publica ni total ni paginación, por lo que result_count cuenta las líneas devueltas por esta llamada.

get_recipe

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

ArgumentoTipoRequeridoQué hace
idcadena, de 1 a 300 caracteresLa clave de página, como Cookbook:Spaghetti_alla_Carbonara.
servingsentero, de 1 a 500noAdapta los ingredientes a este número de porciones.
max_description_charsentero, de 100 a 20000, por defecto 1200noLa cantidad de prosa de la página a servir.

A cambio: title, url, ingredients, equipment, steps, tips para las notas y variantes que la página publica, prep_minutes, cook_minutes, total_minutes, time_text en los términos de la página, time_phases, category y categories para cada categoría bajo la que se clasifica la página. Un número que la página no indica vale null. id nombra la página que se ha leído, que difiere de la clave solicitada después de una redirección, y redirected_from nombra entonces la clave que llevó a ella. yield dice para qué está escrita la receta y hacia qué se ha adaptado, y cada ingrediente lleva scaling, que vale scaled, rounded o unscaled.

scale_ingredients

Aplica la misma aritmética a cualquier lista de ingredientes, sin consultar al wiki.

ArgumentoTipoRequeridoQué hace
ingredientsmatriz de 1 a 100 cadenas, hasta 300 caracteresLas líneas a adaptar.
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.

Pasa factor, o el par from_servings y to_servings.

A cambio: el factor utilizado, los ingredients adaptados en la forma que devuelve get_recipe, y scaled_count, rounded_count y unscaled_count.

list_recipes

Lista recetas según las categorías bajo las que el Cookbook las clasifica. Los argumentos se combinan, y la respuesta dice qué búsqueda se ha construido a partir de ellos.

ArgumentoTipoRequeridoQué hace
cuisinecadena, hasta 80 caracteresnoUna cocina o un país, como Italian o Thai.
dish_typecadena, hasta 80 caracteresnoUn tipo de plato, como soup, dessert o bread.
main_ingredientcadena, hasta 80 caracteresnoEl ingrediente sobre el que se basa una receta.
limitentero, de 1 a 50, por defecto 15noLíneas a servir.

A cambio: las líneas que devuelve search_recipes, con query que nombra la búsqueda construida por este servidor a partir de los argumentos, y cada argumento repetido o null donde se ha omitido.

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 una unidad diferente a la de la receta: 200 g multiplicados por veinte dan 4 kg. La finesse à laquelle un ingrédient se coupe dépend de sa nature. Un pain se coupe en deux, en trois ou en quatre ; un oeuf ne se partage pas. Une quantité qui tombe entre les deux est donc arrondie, et la recette adaptée s'écarte alors un peu des proportions de l'originale. La ligne porte rounded, et sa note dit ce qui a été fait.

Les chiffres sont l'arithmétique de ce serveur, donc dites qu'ils ont été recalculés quand vous les montrez. Une recette dont la page n'indique aucun nombre de parts ne peut pas être portée à un nombre de convives, et la réponse le dit.

La licence et l'attribution

Les pages du Cookbook sont publiées sous Creative Commons Attribution-Partage dans les mêmes conditions 4.0. Reprendre une recette demande de créditer Wikibooks et la page d'où elle vient, et de partager ce qu'on bâtit dessus sous la même licence. get_recipe rend à la fois license et l'url de la page, donc une réponse emporte le crédit avec elle.

Configuration

Chaque variable est facultative. Elles se posent dans le bloc env de la configuration du client.

VariableDéfautCe qu'elle fait
WB_USER_AGENTl'identité du projetNomme votre application auprès de Wikimedia, avec une adresse où joindre une personne.
WB_MIN_INTERVAL_MS1000Écart entre deux requêtes, de 500 à 60000.
WB_TIMEOUT_MS20000Délai d'une requête, de 1000 à 120000.
WB_MAX_RETRIES3Tentatives après un échec passager, de 0 à 8.
WB_CACHE_TTL_MS900000Durée pendant laquelle une page reste en mémoire, de 0 à 86400000.
WB_CACHE_MAX_ENTRIES200Pages gardées en mémoire à la fois, de 1 à 5000.
WB_LOG_LEVELerrorsilent, error, info ou debug, écrit sur la sortie d'erreur.

Une valeur hors de sa plage retombe sur le défaut, et la raison est écrite sur la sortie d'erreur.

Erreurs

Chaque échec porte un des six codes, un message, et quand cela aide une indication du geste suivant.

CodeCe qui s'est passéQue faire
not_foundLe wiki a répondu, et n'a pas cette page.Vérifiez la clé de page avec search_recipes.
invalid_inputLes arguments ont été refusés avant toute requête.Lisez le message, qui nomme l'argument.
rate_limitedWikimedia demande à ce client de ralentir.Attendez les secondes indiquées et rappelez avec les mêmes arguments. La recette est toujours là.
parse_failureLa page a chargé et le contenu attendu est absent.Signalez-le sur le suivi d'incidents.
network_errorLa requête n'a pas abouti.Réessayez sous peu.
timeoutLa requête a dépassé son délai.Augmentez WB_TIMEOUT_MS, ou demandez moins de lignes.

Comme bibliothèque

La couche qui lit le wiki est publiée seule, avec son rythme, son cache et ses erreurs, sans protocole attaché.

import { WikibooksClient } from "mcp-wikibooks-cookbook/client";

const client = new WikibooksClient();
const { data, cached } = await client.getRecipe("Cookbook:Spaghetti_alla_Carbonara");
console.log(data.title, data.ingredients.length, cached);

search et getRecipe répondent chacun { data, cached }, et lèvent une erreur portant un des six codes. Le plancher entre deux requêtes tient également ici.

Rythme et attribution

Les requêtes partent une à une avec au moins une seconde entre elles, et le plancher d'une demi-seconde tient quelle que soit la configuration. Le User-Agent se termine toujours par l'identité du projet et une adresse où joindre une personne.

Les lectures vont vers api.wikimedia.org, l'hôte que Wikimedia documente et maintient pour les développeurs. Chaque résultat porte l'adresse de la page d'où il a été lu, et la licence sous laquelle elle est publiée.

Ce MCP est un projet non officiel, sans affiliation à Wikimedia ni à la communauté Wikibooks.

Confidentialité

Ce serveur ne collecte rien sur vous et n'envoie rien à son auteur. Il tourne sur votre machine, ne joint que api.wikimedia.org, garde ses réponses en mémoire le temps qu'il tourne, et n'écrit rien sur le disque. PRIVACY.md dit ce qu'une requête emporte et quels réglages changent cela.

Développement

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

Les tests s'exécutent sur des fixtures engendrées et n'émettent aucune requête. La suite en direct, npm run test:live, émet une requête par route et tourne chaque nuit contre le service lui-même.

Contribuer

Les anomalies, les questions et les idées ont leur place dans le suivi d'incidents. Les propositions de modification sont bienvenues ; ouvrir un ticket d'abord aide à s'accorder sur la forme du changement. Voir CONTRIBUTING.md.

Licence

MIT pour le code de ce serveur, voir LICENSE. Les pages du Cookbook appartiennent à leurs auteurs et à la communauté Wikibooks, sous CC BY-SA 4.0.