Cook MCP
Un servidor MCP que da acceso a tu colección de recetas Cooklang. Las recetas permanecen como archivos planos .cook y .menu en una carpeta que tú controlas. El agente puede leerlas, buscarlas, validarlas y escribirlas, crear listas de compra, llevar un registro de la despensa y generar informes, todo localmente y sin necesidad de cuenta. Con un inicio de sesión cook.md también puede calcular información nutricional e importar recetas desde fotos y enlaces de redes sociales.
Documentación
cook-mcp
Un servidor MCP que le da a tu agente de IA (Claude Code, Claude Desktop, Cursor, ChatGPT, o cualquier otro cliente MCP) acceso a tu colección de recetas Cooklang. Las recetas permanecen como archivos simples .cook y .menu en una carpeta que tú controlas. El agente puede leerlas, buscarlas, validarlas y escribirlas, crear listas de compras, gestionar una despensa y generar informes, todo localmente y sin necesidad de cuenta. Con un inicio de sesión de cook.md también puede calcular información nutricional e importar recetas desde fotos y enlaces de redes sociales.
Instalación
Claude Code:
claude mcp add cook -- npx -y @cookmd/mcp
Cualquier cliente que acepte una configuración mcpServers:
{
"mcpServers": {
"cook": {
"command": "npx",
"args": ["-y", "@cookmd/mcp"],
"env": { "COOK_RECIPES_DIR": "/path/to/recipes" }
}
}
}
Si COOK_RECIPES_DIR no está configurado, el servidor usa la carpeta del espacio de trabajo que tu cliente comparte, o la carpeta en la que se inició el cliente. Consulta Cómo se elige la carpeta de recetas.
Plataformas compatibles: macOS (arm64, x64) y Linux (x64, arm64, glibc 2.35 o más reciente). Aún no hay compilaciones para Windows.
Notas de configuración para clientes específicos: https://cook.md/help/mcp
Plugin de Claude Code
Los usuarios de Claude Code pueden instalar el plugin cooklang en lugar de añadir el servidor manualmente. Se encuentra en cooklang/cooklang-skills e incluye este servidor junto con las habilidades siguientes:
/plugin marketplace add cooklang/cooklang-skills
/plugin install cooklang@cooklang-skills
El plugin inicia el servidor con la carpeta de tu proyecto de Claude Code como raíz de recetas, y Claude Code elige la habilidad adecuada según lo que pidas ("planifica cenas para la próxima semana", "¿es válida esta receta?"). Si ya añadiste el servidor con claude mcp add cook, elimina esa entrada para no ejecutar dos copias.
Las habilidades (también servidas por este servidor como recursos cooklang://skills/<name>):
| Habilidad | Úsala para |
|---|---|
cooklang-editing | Escribir una receta nueva o editar y corregir un archivo .cook |
cooklang-validation | Verificar recetas, una carpeta o toda la colección en busca de errores y referencias rotas |
metadata | Añadir o corregir frontmatter YAML (título, etiquetas, porciones, tiempos), incluidos cambios masivos |
recipe-import | Importar una receta desde una URL, fotos o texto pegado |
recipe-search | Encontrar recetas por ingrediente, etiqueta, cocina, plato o una frase recordada |
scale-recipe | Mostrar una receta para más o menos porciones |
export-recipe | Convertir una receta a Markdown, JSON, texto plano o HTML |
organize-collection | Diseño de carpetas, auditoría de metadatos, configuración de pasillos y despensa, comprobaciones de toda la biblioteca |
meal-planning | Crear o editar un plan de comidas .menu |
shopping-list | Listas de compras a partir de recetas o planes, agrupadas por pasillo, restando la despensa |
pantry | Controlar existencias, caducidades y artículos con poco stock; qué puedo cocinar con lo que tengo |
report-authoring | Informes y impresiones personalizados con Jinja usando render_report |
nutrition-reports | Evaluación y cribado nutricional (Cook Basic o Pro) |
nutrition-goals | Cambiar una receta o plan para alcanzar objetivos nutricionales (Cook Basic o Pro) |
skills/ en este repositorio es la copia canónica; el repositorio del plugin se sincroniza desde ella. Cada habilidad es skills/<name>/SKILL.md.
Herramientas
Gratuitas (locales, sin inicio de sesión)
| Herramienta | Qué hace |
|---|---|
list_recipes | Listar recetas, planes de comidas o plantillas de informes (kind: receta, menú, plantilla, todo) |
read_recipe | Leer una receta o menú: fuente más ingredientes analizados, utensilios, pasos y metadatos; escalado opcional |
search_recipes | Buscar nombres y contenidos, opcionalmente filtrado por etiqueta |
validate | Verificar un archivo, una carpeta, toda la colección o contenido sin guardar en busca de errores y referencias rotas |
write_recipe | Guardar una receta .cook (validada primero) |
write_menu | Guardar un plan de comidas .menu (validado primero) |
write_config | Guardar config/aisle.conf, config/pantry.conf o una plantilla de informe .jinja en reports/ o config/reports/ |
shopping_list | Crear una lista de compras a partir de recetas y/o menús: combina duplicados, agrupa por pasillo, resta la despensa |
pantry_list | Mostrar la despensa, por sección |
pantry_expiring | Artículos que caducan pronto |
pantry_depleted | Artículos en o por debajo de su umbral de stock bajo |
pantry_recipes | Qué recetas puedes cocinar con lo que hay en la despensa |
pantry_update | Añadir, actualizar o eliminar artículos de la despensa |
render_report | Renderizar una plantilla de informe jinja para una receta o menú (las plantillas simples no requieren inicio de sesión) |
Cook Basic / Pro (inicio de sesión cook.md)
| Herramienta | Qué hace |
|---|---|
login | Iniciar un inicio de sesión de dispositivo cook.md; muestra un código y una URL |
auth_status | Mostrar estado del inicio de sesión, plan y asignación de importaciones |
get_nutrition | Datos nutricionales para una cantidad de un ingrediente |
aggregate_nutrition | Sumar nutrición en varias líneas de ingredientes |
lookup_ingredient | Búsqueda difusa en el catálogo de ingredientes |
convert_units | Convertir entre unidades (volumen a masa requiere una densidad) |
check_category | Verificar si un ingrediente pertenece a una categoría |
branded_lookup | Buscar un producto envasado por código de barras o texto |
reference_intakes | Tablas de ingesta diaria de referencia (RDA/DV) |
import_recipe | Convertir una página web, fotos o texto pegado a Cooklang |
import_recipe desde una página web o texto pegado funciona sin inicio de sesión. Las fotos y enlaces de redes sociales requieren una cuenta cook.md y usan tu asignación de importaciones. Devuelve texto Cooklang y no lo guarda; el agente lo valida y llama a write_recipe. Las funciones de nutrición dentro de render_report también requieren Cook Basic o Pro.
Prompts y recursos
Prompts: meal-planning, shopping-list, pantry, import-recipe, edit-recipe, nutrition-report, nutrition-goals, scale-recipe.
Recursos:
cooklang://spec: la especificación Cooklangcooklang://syntax: una referencia de sintaxiscooklang://menu-format: el formato de plan de comidas.menucooklang://skills/<name>: guías de trabajo para el agente, una por habilidad en la tabla anterior:cooklang-editing,cooklang-validation,export-recipe,meal-planning,metadata,nutrition-goals,nutrition-reports,organize-collection,pantry,recipe-import,recipe-search,report-authoring,scale-recipe,shopping-list
Seguridad
- Las escrituras permanecen dentro de la raíz de recetas. Se rechazan rutas fuera de ella.
- Cada escritura se valida primero; no se guarda Cooklang inválido.
- La sintaxis de metadatos
>>obsoleta se rechaza. Usa frontmatter YAML. - No hay herramienta de eliminación. El agente no puede eliminar tus archivos.
Limitaciones conocidas
- La resta de la despensa en listas de compras solo funciona cuando las unidades coinciden. Por ejemplo, 1 kg en la despensa no cancela 200 g en una receta. Esto es una limitación de cookcli-core.
- Los enlaces simbólicos dentro de la carpeta de recetas generalmente no se siguen para lecturas y listados. Un enlace simbólico solicitado por nombre simple sin extensión, o alcanzado a través de una referencia
@./de una receta, aún puede seguirse. Esto solo importa si pones enlaces simbólicos que apunten fuera de la carpeta en tus recetas. - Aún no hay compilaciones para Windows.
- No hay herramienta de eliminación.
Variables de entorno
| Var | Predeterminado | Significado |
|---|---|---|
COOK_RECIPES_DIR | las raíces del cliente, luego su directorio de trabajo | Raíz de recetas. Cada ruta es relativa a ella. Siempre gana cuando está configurada. |
COOKMD_BASE_URL | https://cook.md | Inicio de sesión, derechos, importación |
NUTRITION_API_URL | https://nutrition.cook.md | Servicio de nutrición |
NUTRITION_API_TOKEN | ninguno | Clave de organización o token pregenerado. Tiene prioridad sobre el inicio de sesión almacenado. |
COOK_MCP_AUTH_PATH | ~/.config/cook-mcp/auth.json | Almacén de tokens. El antiguo NUTRITION_MCP_AUTH_PATH sigue funcionando como alias. |
Cómo se elige la carpeta de recetas
COOK_RECIPES_DIR, si está configurado. No se consulta nada más.- Las raíces MCP del cliente. Si el cliente admite raíces (comparte sus carpetas de espacio de trabajo abiertas con el servidor), la primera raíz
file://que sea una carpeta existente se convierte en la raíz de recetas. El servidor pregunta en la primera llamada de herramienta de recetas y de nuevo cada vez que el cliente informa que sus raíces cambiaron. Si el cliente no responde en 5 segundos, el servidor usa el directorio de trabajo y vuelve a preguntar más tarde (como máximo una vez cada 30 segundos). - La carpeta en la que el cliente inició el servidor.
Una raíz es una carpeta que abriste a propósito, por lo que se usa a menos que sea /, tu carpeta de inicio o dentro de una carpeta de instalación de plugin de agente (por ejemplo ~/.codex/plugins/cache/..., ~/.gemini/extensions/... o la carpeta a la que apunta CLAUDE_PLUGIN_ROOT). El directorio de trabajo se verifica más estrictamente: también se rechaza cuando él, o una carpeta hasta cuatro niveles por encima, tiene .claude-plugin/plugin.json, un plugin.json de Agent Plugins o gemini-extension.json, porque un plugin que inicia el servidor en su propia carpeta de instalación expondría archivos incorrectos y escribiría recetas en una carpeta que se borra al actualizar. Cuando no se encuentra nada utilizable, las herramientas de recetas indican que no hay carpeta de recetas configurada, por qué, y que COOK_RECIPES_DIR lo soluciona; auth_status muestra recipe_root_source: "unset". De lo contrario, recipe_root_source es env, roots o cwd.
Qué hace cada cliente:
-
Claude Code envía su carpeta de proyecto como raíz (verificado), así que no hay nada que configurar.
-
Codex no envía raíces (verificado con 0.160.1) y puede iniciar el servidor en una carpeta de plugin, así que configura
COOK_RECIPES_DIR:codex mcp add cook --env COOK_RECIPES_DIR=/path/to/recipes -- npx -y @cookmd/mcp -
VS Code y Cursor documentan soporte para raíces (no verificado aquí). Si las herramientas de recetas indican que no hay carpeta configurada, configura
COOK_RECIPES_DIRen la configuración del servidor.
Cosas para preguntar
- "Planifica cenas para la próxima semana con mis recetas y haz la lista de compras."
- "¿Qué puedo cocinar con lo que hay en mi despensa?"
- "Revisa toda mi colección en busca de referencias rotas."
- "Importa https://example.com/some-recipe como receta."
- "¿Cuánta proteína hay en el plan de esta semana?" (requiere Cook Basic o Pro)
Compilación desde el código fuente
cargo build --release
cargo test
El binario es target/release/cook-mcp. Habla MCP sobre stdio. cook-mcp login y cook-mcp logout gestionan el inicio de sesión de cook.md desde una terminal.
Migración desde nutrition-mcp
@cookmd/nutrition-mcp sigue funcionando: ahora es un adaptador delgado que ejecuta @cookmd/mcp. Para cambiar, modifica el nombre del paquete en tu configuración MCP a @cookmd/mcp. Tu inicio de sesión se transfiere.
Dos cosas cambiaron. Las herramientas de recetas necesitan COOK_RECIPES_DIR (las configuraciones antiguas no lo establecían), o inicia el cliente en tu carpeta de recetas; sin ninguna de las dos, las herramientas de recetas le indican al agente que no hay carpeta de recetas configurada. Y las rutas render_report ahora son relativas a la carpeta de recetas.
Licencia
MIT