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-editingEscribir una receta nueva o editar y corregir un archivo .cook
cooklang-validationVerificar recetas, una carpeta o toda la colección en busca de errores y referencias rotas
metadataAñadir o corregir frontmatter YAML (título, etiquetas, porciones, tiempos), incluidos cambios masivos
recipe-importImportar una receta desde una URL, fotos o texto pegado
recipe-searchEncontrar recetas por ingrediente, etiqueta, cocina, plato o una frase recordada
scale-recipeMostrar una receta para más o menos porciones
export-recipeConvertir una receta a Markdown, JSON, texto plano o HTML
organize-collectionDiseño de carpetas, auditoría de metadatos, configuración de pasillos y despensa, comprobaciones de toda la biblioteca
meal-planningCrear o editar un plan de comidas .menu
shopping-listListas de compras a partir de recetas o planes, agrupadas por pasillo, restando la despensa
pantryControlar existencias, caducidades y artículos con poco stock; qué puedo cocinar con lo que tengo
report-authoringInformes y impresiones personalizados con Jinja usando render_report
nutrition-reportsEvaluación y cribado nutricional (Cook Basic o Pro)
nutrition-goalsCambiar 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)

HerramientaQué hace
list_recipesListar recetas, planes de comidas o plantillas de informes (kind: receta, menú, plantilla, todo)
read_recipeLeer una receta o menú: fuente más ingredientes analizados, utensilios, pasos y metadatos; escalado opcional
search_recipesBuscar nombres y contenidos, opcionalmente filtrado por etiqueta
validateVerificar un archivo, una carpeta, toda la colección o contenido sin guardar en busca de errores y referencias rotas
write_recipeGuardar una receta .cook (validada primero)
write_menuGuardar un plan de comidas .menu (validado primero)
write_configGuardar config/aisle.conf, config/pantry.conf o una plantilla de informe .jinja en reports/ o config/reports/
shopping_listCrear una lista de compras a partir de recetas y/o menús: combina duplicados, agrupa por pasillo, resta la despensa
pantry_listMostrar la despensa, por sección
pantry_expiringArtículos que caducan pronto
pantry_depletedArtículos en o por debajo de su umbral de stock bajo
pantry_recipesQué recetas puedes cocinar con lo que hay en la despensa
pantry_updateAñadir, actualizar o eliminar artículos de la despensa
render_reportRenderizar 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)

HerramientaQué hace
loginIniciar un inicio de sesión de dispositivo cook.md; muestra un código y una URL
auth_statusMostrar estado del inicio de sesión, plan y asignación de importaciones
get_nutritionDatos nutricionales para una cantidad de un ingrediente
aggregate_nutritionSumar nutrición en varias líneas de ingredientes
lookup_ingredientBúsqueda difusa en el catálogo de ingredientes
convert_unitsConvertir entre unidades (volumen a masa requiere una densidad)
check_categoryVerificar si un ingrediente pertenece a una categoría
branded_lookupBuscar un producto envasado por código de barras o texto
reference_intakesTablas de ingesta diaria de referencia (RDA/DV)
import_recipeConvertir 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 Cooklang
  • cooklang://syntax: una referencia de sintaxis
  • cooklang://menu-format: el formato de plan de comidas .menu
  • cooklang://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

VarPredeterminadoSignificado
COOK_RECIPES_DIRlas raíces del cliente, luego su directorio de trabajoRaíz de recetas. Cada ruta es relativa a ella. Siempre gana cuando está configurada.
COOKMD_BASE_URLhttps://cook.mdInicio de sesión, derechos, importación
NUTRITION_API_URLhttps://nutrition.cook.mdServicio de nutrición
NUTRITION_API_TOKENningunoClave de organización o token pregenerado. Tiene prioridad sobre el inicio de sesión almacenado.
COOK_MCP_AUTH_PATH~/.config/cook-mcp/auth.jsonAlmacén de tokens. El antiguo NUTRITION_MCP_AUTH_PATH sigue funcionando como alias.

Cómo se elige la carpeta de recetas

  1. COOK_RECIPES_DIR, si está configurado. No se consulta nada más.
  2. 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).
  3. 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_DIR en 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