mcpbeat Sign in

Baoyu Markdown To HTML Agent Skill

Converts Markdown to styled HTML with WeChat-compatible themes. Supports code highlighting, math, Mermaid (rendered to PNG via headless Chrome), PlantUML, footnotes, alerts, infographics, and optional bottom citations for external links. Use when user asks for "markdown to html", "convert md to html", "md 转 html", "微信外链转底部引用", or needs styled HTML output from markdown.

12k tokens
context cost
the whole folder, loaded on every use
5
files
ships runnable scripts
0
copies elsewhere
how many repositories repackaged it
24514
stars on the repo
on the repository, not the skill itself

Install

one command, takes just this skill from the repository
npx skills add https://github.com/JimLiu/baoyu-skills --skill baoyu-markdown-to-html

The instruction itself

16 sections, as written by the author

Markdown to HTML Converter

Converts Markdown files to beautifully styled HTML with inline CSS, optimized for WeChat Official Account and other platforms.

User Input Tools

When this skill prompts the user, follow this tool-selection rule (priority order):

  • Prefer built-in user-input tools exposed by the current agent runtime — e.g., AskUserQuestion, request_user_input, clarify, ask_user, or any equivalent.
  • Fallback: if no such tool exists, emit a numbered plain-text message and ask the user to reply with the chosen number/answer for each question.
  • Batching: if the tool supports multiple questions per call, combine all applicable questions into a single call; if only single-question, ask them one at a time in priority order.

Concrete AskUserQuestion references below are examples — substitute the local equivalent in other runtimes.

Script Directory

Agent Execution: Determine this SKILL.md directory as {baseDir}. Resolve ${BUN_X} runtime: if bun installed → bun; if npx available → npx -y bun; else suggest installing bun. Replace {baseDir} and ${BUN_X} with actual values.

| Script | Purpose |

|--------|---------|

| scripts/main.ts | Main entry point |

Preferences (EXTEND.md)

Check EXTEND.md in priority order — the first one found wins:

| Priority | Path | Scope |

|----------|------|-------|

| 1 | .baoyu-skills/baoyu-markdown-to-html/EXTEND.md | Project |

| 2 | ${XDG_CONFIG_HOME:-$HOME/.config}/baoyu-skills/baoyu-markdown-to-html/EXTEND.md | XDG |

| 3 | $HOME/.baoyu-skills/baoyu-markdown-to-html/EXTEND.md | User home |

If none found, use defaults.

EXTEND.md supports: default theme, custom CSS variables, code block style, mermaid defaults (mermaid_theme, mermaid_scale, mermaid_background).

Workflow

Step 0: Pre-check (Chinese Content)

Condition: Only execute if input file contains Chinese text.

Detection:

  • Read input markdown file
  • Check if content contains CJK characters (Chinese/Japanese/Korean)
  • If no CJK content → skip to Step 1

Format Suggestion:

If CJK content detected AND baoyu-format-markdown skill is available:

Use AskUserQuestion to ask whether to format first. Formatting can fix:

  • Bold markers with punctuation inside causing ** parse failures
  • CJK/English spacing issues

If user agrees: Invoke baoyu-format-markdown skill to format the file, then use formatted file as input.

If user declines: Continue with original file.

Step 1: Determine Theme

Theme resolution order (first match wins):

  • User explicitly specified theme (CLI --theme or conversation)
  • EXTEND.md default_theme (this skill's own EXTEND.md, checked in Step 0)
  • baoyu-post-to-wechat EXTEND.md default_theme (cross-skill fallback)
  • If none found → use AskUserQuestion to confirm

Cross-skill EXTEND.md check (only if this skill's EXTEND.md has no default_theme):

Read $HOME/.baoyu-skills/baoyu-post-to-wechat/EXTEND.md if it exists and look for a default_theme: line. Use the value if present; otherwise fall through.

If theme is resolved from EXTEND.md: Use it directly, do NOT ask the user.

If no default found: use AskUserQuestion to confirm a theme from the Themes table below.

Step 1.5: Determine Citation Mode

Default: Off. Do not ask by default.

Enable only if the user explicitly asks for "微信外链转底部引用", "底部引用", "文末引用", or passes --cite.

Behavior when enabled:

  • Ordinary external links are rendered with numbered superscripts and collected under a final 引用链接 section.
  • https://mp.weixin.qq.com/... links stay as direct links and are not moved to the bottom.
  • Bare links where link text equals URL stay inline.

Step 2: Convert

${BUN_X} {baseDir}/scripts/main.ts <markdown_file> --theme <theme> [--cite]

Step 3: Report Result

Display the output path from JSON result. If backup was created, mention it.

Usage

${BUN_X} {baseDir}/scripts/main.ts <markdown_file> [options]

Options:

| Option | Description | Default |

|--------|-------------|---------|

| --theme <name> | Theme name (default, grace, simple, modern) | default |

| --color <name\|hex> | Primary color: preset name or hex value | theme default |

| --font-family <name> | Font: sans, serif, serif-cjk, mono, or CSS value | theme default |

| --font-size <N> | Font size: 14px, 15px, 16px, 17px, 18px | 16px |

| --title <title> | Override title from frontmatter | |

| --cite | Convert external links to bottom citations, append 引用链接 section | false (off) |

| --keep-title | Keep the first heading in content | false (removed) |

| --mermaid-theme <name> | Mermaid theme: default, forest, dark, neutral, base | default |

| --mermaid-scale <N> | Mermaid render scale (positive number ≤ 4) | 2 |

| --mermaid-width <N> | Mermaid target display width in CSS px; PNG is rendered at width × scale pixels when the diagram is narrower than this | 860 |

| --mermaid-bg <value> | Mermaid background: white, transparent, or #hex | white |

| --no-mermaid | Skip Mermaid PNG rendering; emit <pre class="mermaid"> fallback | false |

| --help | Show help | |

Color Presets:

| Name | Hex | Label |

|------|-----|-------|

| blue | #0F4C81 | Classic Blue |

| green | #009874 | Emerald Green |

| vermilion | #FA5151 | Vibrant Vermilion |

| yellow | #FECE00 | Lemon Yellow |

| purple | #92617E | Lavender Purple |

| sky | #55C9EA | Sky Blue |

| rose | #B76E79 | Rose Gold |

| olive | #556B2F | Olive Green |

| black | #333333 | Graphite Black |

| gray | #A9A9A9 | Smoke Gray |

| pink | #FFB7C5 | Sakura Pink |

| red | #A93226 | China Red |

| orange | #D97757 | Warm Orange (modern default) |

Examples:

# Basic conversion (uses default theme, removes first heading)
${BUN_X} {baseDir}/scripts/main.ts article.md

# With specific theme
${BUN_X} {baseDir}/scripts/main.ts article.md --theme grace

# Theme with custom color
${BUN_X} {baseDir}/scripts/main.ts article.md --theme modern --color red

# Enable bottom citations for ordinary external links
${BUN_X} {baseDir}/scripts/main.ts article.md --cite

# Keep the first heading in content
${BUN_X} {baseDir}/scripts/main.ts article.md --keep-title

# Override title
${BUN_X} {baseDir}/scripts/main.ts article.md --title "My Article"

Output

File location: Same directory as input markdown file.

  • Input: /path/to/article.md
  • Output: /path/to/article.html

Conflict handling: If HTML file already exists, it will be backed up first:

  • Backup: /path/to/article.html.bak-YYYYMMDDHHMMSS

JSON output to stdout:

{
  "title": "Article Title",
  "author": "Author Name",
  "summary": "Article summary...",
  "htmlPath": "/path/to/article.html",
  "backupPath": "/path/to/article.html.bak-20260128180000",
  "contentImages": [
    {
      "placeholder": "MDTOHTMLIMGPH_1",
      "localPath": "/path/to/img.png",
      "originalPath": "imgs/image.png"
    }
  ],
  "mermaidImages": [
    {
      "hash": "a1b2c3d4e5f6",
      "localPath": "/path/to/imgs/.mermaid-cache/mermaid-a1b2c3d4e5f6.png",
      "cached": false
    }
  ]
}

Mermaid rendering: Code blocks fenced as mermaid are rendered to PNGs via headless Chrome (CDP) and cached at imgs/.mermaid-cache/mermaid-<hash>.png. The cache key includes the code, theme, scale, target width, background, and mermaid version. Add imgs/.mermaid-cache/ to .gitignore if you do not want generated diagrams checked in. Requires Chrome/Chromium/Edge on the system; otherwise the block falls back to <pre class="mermaid">…</pre>` and conversion still succeeds.

Themes

| Theme | Description |

|-------|-------------|

| default | Classic - traditional layout, centered title with bottom border, H2 with white text on colored background |

| grace | Elegant - text shadow, rounded cards, refined blockquotes (by @brzhang) |

| simple | Minimal - modern minimalist, asymmetric rounded corners, clean whitespace (by @okooo5km) |

| modern | Modern - large radius, pill-shaped titles, relaxed line height (pair with --color red for traditional red-gold style) |

Supported Markdown Features

| Feature | Syntax |

|---------|--------|

| Headings | # H1 to ###### H6 |

| Bold/Italic | bold, *italic* |

| Code blocks | lang ` with syntax highlighting |

| Inline code | code |

| Tables | GitHub-flavored markdown tables |

| Images | !alt |

| Links | text; add --cite to move ordinary external links into bottom references |

| Blockquotes | > quote |

| Lists | - unordered, 1. ordered |

| Alerts | > [!NOTE], > [!WARNING], etc. |

| Footnotes | [^1] references |

| Ruby text | {base|annotation} |

| Mermaid | mermaid blocks rendered to local PNG via headless Chrome (cached under imgs/.mermaid-cache/); falls back to <pre class="mermaid">` if Chrome is unavailable or rendering fails |

| PlantUML | plantuml ` diagrams |

Frontmatter

Supports YAML frontmatter for metadata:

---
title: Article Title
author: Author Name
description: Article summary
---

If no title is found, extracts from first H1/H2 heading or uses filename.

Extension Support

Custom configurations via EXTEND.md. See Preferences section for paths and supported options.

Other skills for the same job

different authors, same section of the catalogue
Design Exploration
by ComeOnOliver
×1

新功能设计探索流程。当用户有模糊想法要做新功能/新模块时使用。通过"需求收敛 → 技术调研 → ASCII 批量探索 → HTML 设计稿 → 全状态覆盖 → 需求总结"的结构化流程,从模糊想法产出可交付的设计参考文档,作为 PRD 阶段的输入。

6k tokens zh
Deck Guizang Editorial
by nexu-io

Editorial magazine meets e-ink: 10 layouts and 5 palettes (Ink, Indigo Porcelain, Forest Ink, Kraft Paper, Dune).

3k tokens zh
Paper Poster HTML
by wanshuiyin

DEFAULT poster pipeline — build an academic conference poster (ICML/NeurIPS/ICLR/CVPR/...) as a single HTML/CSS file with measurement-driven hard gates, real paper figures, a two-hue design-token system, and print-ready PDF via headless Chromium. Use when the user says \"做海报\", \"poster\", \"conference poster\", \"paper poster\", or asks to design/redo a research poster.

5k tokens
Paper Poster HTML
by wanshuiyin

DEFAULT poster pipeline — build an academic conference poster (ICML/NeurIPS/ICLR/CVPR/...) as a single HTML/CSS file with measurement-driven hard gates, real paper figures, a two-hue design-token system, and print-ready PDF via headless Chromium. Use when the user says \"做海报\", \"poster\", \"conference poster\", \"paper poster\", or asks to design/redo a research poster. Supersedes the retired LaTeX /paper-poster.

116k tokens scripts
Trend Researcher
by davepoon

Research latest UI/UX trends from Dribbble and design communities. Use when starting a design project to understand current visual trends, color palettes, and layout patterns.

969 tokens
Claude
by bergside

A research-journal aesthetic printed on warm stone — authoritative, editorial, almost achromatic. Pages live on warm ivory parchment (never pure white), with near-black slate as the dominant ink.

1k tokens
Paper
by bergside

Paper-textured, print-inspired design with minimal colors, clean serif/sans typography, and tactile surface qualities.

1k tokens
Riso
by bergside

A playful, joyful, two-color risograph print aesthetic built on a single warm off-white paper surface running through every section

1k tokens

How to use it

Copy the folder

Take jimliu/baoyu-markdown-to-html from the repository into ~/.claude/skills for personal use, or into .claude/skills inside a project.

Check the name does not clash

The agent identifies a skill by the name field in its header. Two skills with the same name cannot sit side by side — one of them will be ignored.

Install what it needs

The instructions reference npx. Without those the skill loads but fails at the first command.