
Md To Feishu
Publish local Markdown specs or notes as Feishu (Lark) docs with images uploaded automatically for teams that run on Feishu.
Install
npx skills add https://github.com/zc277584121/marketing-skills --skill md-to-feishuWhat is this skill?
- Two-step flow: auto title from first H1 or generated title, then create via feishu-docx CLI
- Runtime cascade: uvx feishu-docx (preferred), global feishu-docx, or install guidance if missing
- Supports uvx --python 3.11 when the default interpreter is below 3.11
- Single required input is Markdown file path; optional explicit title override
- Automatic image upload from local paths referenced in the Markdown
Adoption & trust: 802 installs on skills.sh; 0/3 security scanners passed (skills.sh audits).
Recommended Skills
Lark Maillarksuite/cli
Lark Slideslarksuite/cli
Pptxanthropics/skills
Pdfanthropics/skills
Lark Markdownlarksuite/cli
Docxanthropics/skills
Journey fit
Common Questions / FAQ
Is Md To Feishu safe to install?
skills.sh reports 0 of 3 security scanners passed. Review the Security Audits panel on this page before installing in production.
SKILL.md
READMESKILL.md - Md To Feishu
# Markdown to Feishu Document Convert a local Markdown file into a Feishu document, with automatic image upload. ## User Input The user only needs to provide a **Markdown file path**. Title is optional — if not provided, extract it automatically (see below). ## Step 1: Determine the Document Title 1. Read the Markdown file and look for the first `# heading` — use that as the title. 2. If no `# heading` exists, scan the content and generate a concise, descriptive title based on the topic. 3. If the user explicitly provides a title, use that instead. ## Step 2: Check the Runtime Environment Try each option in order. Use the **first one that works**. ### Option A: uvx (preferred) ```bash which uvx ``` If `uvx` is available, the run command is: ```bash uvx feishu-docx create "<TITLE>" -f <MARKDOWN_FILE_PATH> ``` If `uvx` runs with Python < 3.11, add `--python 3.11`: ```bash uvx --python 3.11 feishu-docx create "<TITLE>" -f <MARKDOWN_FILE_PATH> ``` ### Option B: feishu-docx already installed ```bash which feishu-docx ``` If found, check Python version: ```bash python3 --version ``` If Python >= 3.11, the run command is: ```bash feishu-docx create "<TITLE>" -f <MARKDOWN_FILE_PATH> ``` ### Option C: Nothing available — install guidance If neither `uvx` nor `feishu-docx` is found, tell the user: > `feishu-docx` requires Python >= 3.11. Install with one of: > > ```bash > # Recommended: install uv, then run directly without global install > curl -LsSf https://astral.sh/uv/install.sh | sh > uvx feishu-docx create "Title" -f file.md > > # Or: install globally with pip (Python >= 3.11 required) > pip install feishu-docx > ``` > > Feishu credentials must be configured first: > ```bash > feishu-docx config set --app-id <APP_ID> --app-secret <APP_SECRET> > ``` Then stop and wait for the user to set up the environment. ## Step 3: Pre-process Mermaid Blocks The `feishu-docx` tool cannot handle Mermaid code blocks. Before uploading, check if the Markdown contains any ` ```mermaid ` blocks and convert them to images first. ### 3a: Scan for Mermaid blocks Read the Markdown file and check if it contains any ` ```mermaid ` fenced code blocks. If **none are found, skip to Step 4**. ### 3b: Create a temporary copy Copy the original Markdown file to a temp file in the same directory (so relative image paths still work): ``` <original-name>.feishu-tmp.md ``` For example: `blog_post.md` → `blog_post.feishu-tmp.md` All subsequent modifications happen on this temp copy. The original file is never modified. ### 3c: Render Mermaid diagrams to PNG For each ` ```mermaid ... ``` ` block in the temp file, render it to a PNG image using the mermaid.ink API: ```python import base64, urllib.request def render_mermaid(code: str, output_path: str): """Render a Mermaid diagram to PNG via mermaid.ink API.""" encoded = base64.urlsafe_b64encode(code.encode()).decode() url = f"https://mermaid.ink/img/{encoded}?bgColor=white" req = urllib.request.Request(url, headers={"User-Agent": "Mozilla/5.0"}) resp = urllib.request.urlopen(req, timeout=30) with open(output_path, "wb") as f: f.write(resp.read()) ``` **Important:** The `User-Agent` header is required — mermaid.ink returns 403 without it. Save rendered images to the same directory as the Markdown file, using descriptive filenames based on diagram content: - GOOD: `mermaid-architecture-overview.png`, `mermaid-data-flow.png` - BAD: `mermaid-1.png`, `diagram.png` ### 3d: Replace Mermaid blocks with image references In the temp copy, replace each ` ```mermaid ... ``` ` block with a Markdown image reference: ```markdown  ``` Use relative paths from the temp file to the rendered images. ### 3e: Use the temp file for upload From this poin