Skip to content
Back to skills

Metadata

ASecurity

Use when adding, normalizing, or fixing YAML frontmatter in Cooklang .cook recipes or .menu plans (title, tags, source, servings/yield, times, diet, locale, images), including converting old >> metadata lines and bulk metadata changes across a library.

  • 8 stars
  • 0 votes
  • 0 copies
  • 1 view
  • Added October 6, 2026
ai-agentsgogit

Works with

  • mcp

Security analysis

A100/100

Scanned October 6, 2026

npx -y skills add cooklang/cooklang-skills --skill metadata --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Metadata?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Metadata
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/cooklang-metadata/badge)](https://www.skillsdirectory.com/skills/cooklang-metadata)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: metadata
description: Use when adding, normalizing, or fixing YAML frontmatter in Cooklang .cook recipes or .menu plans (title, tags, source, servings/yield, times, diet, locale, images), including converting old >> metadata lines and bulk metadata changes across a library.
---

# Skill: metadata

**Needs the Cook MCP server** (tools like `read_recipe` and `write_recipe`). If these tools are missing, the Cook MCP server isn't connected: if you installed the cooklang plugin or extension, check that its `cook` server is running (e.g. `/mcp`) or reinstall it; otherwise add it from https://github.com/cook-md/cook-mcp. Do not rewrite files without them.

Use when adding, normalizing, or fixing recipe/menu metadata (YAML frontmatter): titles, tags, source/author, servings/yield, times, diet, locale, images, or bulk metadata changes across a library.

This skill owns all metadata guidance. The cooklang-editing and meal-planning skills defer metadata/frontmatter work to here.

## Hard rule

Metadata is YAML frontmatter between `---` markers at the very start of the file. NEVER use the old `>>` metadata lines — reason: they are removed from the language; only frontmatter is supported, and `write_recipe` refuses them. If a file still has them, convert them to frontmatter keys as part of the edit.

## Workflow

Changing metadata — tags, cuisine, source, any frontmatter key — on one file or many:

1. Pick the targets. Use `search_recipes` (`tag`, or words) or `list_recipes` (`dir` for a folder) rather than reading the whole library. For a rule like "everything in Desserts/", the folder listing is the selection.
2. For each file: `read_recipe`, change only the frontmatter, and keep the recipe body byte-for-byte. Match the file's existing key names, casing, order and tag style; add a frontmatter block if the file has none; never duplicate a tag.
3. Save each file with `write_recipe` (`.cook`) or `write_menu` (`.menu`), sending the full file content — there is no metadata-only write.
4. More than about 10 files → tell the user how many files you will touch and get a yes first; every write replaces a real file.
5. Tell the user what you changed, in which files, and name any files you skipped and why.

For a brand-new file, the frontmatter is part of the content you save with `write_recipe`.

## Canonical metadata fields

| Key (and synonyms) | Purpose | Example |
| --- | --- | --- |
| `title` | Recipe title. | `Uzbek Manti` |
| `source`, `source.name` | Where it came from (URL or text). | `https://example.org/recipe`, `mums` |
| `source.url` | URL when the nested form is used. | `https://example.org/recipe` |
| `author`, `source.author` | Recipe author. | `John Doe` |
| `servings`, `serves`, `yield` | People/amount. Leading number drives scaling; the rest shows as units. | `2`, `15 cups worth` |
| `course`, `category` | Meal category or course. | `dinner` |
| `locale` | ISO 639 language, optional `_` then ISO 3166 country. Used for spelling and pluralisation. | `en_GB`, `fr` |
| `time`, `time required`, `duration` | Total prep + cook time. Prefer `HhMm`. | `1h30m` |
| `prep time`, `time.prep` | Prep only. | `2 hour 30 min` |
| `cook time`, `time.cook` | Cooking only. | `10 minutes` |
| `difficulty` | Difficulty level. | `easy` |
| `cuisine` | Cuisine. | `French` |
| `diet` | Dietary suitability; string or array. | `gluten-free`, `[vegan, halal]` |
| `tags` | Descriptive tags (array). | `[baking, summer]` |
| `image`, `images`, `picture`, `pictures` | Image URL, or array of URLs. | `https://example.org/img.jpg` |
| `description`, `introduction` | Notes about the recipe. | `Traditional Uzbek dish…` |

## Rules

- Frontmatter goes at the very top of the file, before any step or section.
- Match the file's existing conventions (key spelling, casing) — reason: a file that mixes `serves` and `servings` is harder to maintain.
- Keep `servings`/`yield` accurate — reason: they drive recipe scaling and any shopping-list or menu math built on top.
- `search_recipes` with `tag` matches the frontmatter `tags` list, so consistent tags make the library searchable.
- Touch only the files the task names.

## Do not skip the care

| Excuse | Rebuttal |
|--------|----------|
| "It's only metadata, I'll rewrite the body from memory." | `write_recipe` saves exactly what you send. Copy the body from `read_recipe`'s `source` unchanged. |
| "The metadata edit is tiny, I'll say it's done." | Say it's done after `write_recipe` succeeds, and name the file. |

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.