关于 md-to-feishu
将本地 Markdown 文件转换为飞书文档的技能,适合需要发布文档的用户。它可从首个标题确定文档标题,并在上传前将 Mermaid 图表转换为图片。
主要功能
- 01从首个一级标题提取标题
- 02自动上传图片
- 03上传前将 Mermaid 图表转为图片
- 04优先使用 uvx 或已安装的 feishu-docx
适用场景
- 01将 Markdown 笔记发布为飞书文档
- 02把含 Mermaid 图表的 Markdown 转为飞书文档
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ zc277584121/ marketing-skills --skill md-to-feishu安装后在 Claude Code 中输入/md-to-feishu确认已加载。
详细介绍
Markdown 转飞书文档
将本地 Markdown 文件转换为飞书文档,并自动上传图片。
用户输入
用户只需提供 Markdown 文件路径。标题为可选项——如果未提供,则自动提取(见下文)。
第 1 步:确定文档标题
- 读取 Markdown 文件,查找第一个
# heading,并将其用作标题。 - 如果不存在
# heading,则扫描内容,根据主题生成简洁、明确的标题。 - 如果用户明确提供了标题,则使用该标题。
第 2 步:检查运行环境
按顺序尝试每个选项,使用第一个可用的选项。
选项 A:uvx(首选)
which uvx
如果 uvx 可用,运行命令为:
uvx feishu-docx create "<TITLE>" -f <MARKDOWN_FILE_PATH>
如果 uvx 使用的 Python 版本低于 3.11,则添加 --python 3.11:
uvx --python 3.11 feishu-docx create "<TITLE>" -f <MARKDOWN_FILE_PATH>
选项 B:已安装 feishu-docx
which feishu-docx
如果已找到,则检查 Python 版本:
python3 --version
如果 Python 版本 >= 3.11,运行命令为:
feishu-docx create "<TITLE>" -f <MARKDOWN_FILE_PATH>
选项 C:都不可用——安装指引
如果找不到 uvx 或 feishu-docx,请告知用户:
feishu-docx需要 Python >= 3.11。可通过以下任一方式安装:# 推荐:安装 uv,然后直接运行,无需全局安装 curl -LsSf https://astral.sh/uv/install.sh | sh uvx feishu-docx create "Title" -f file.md # 或:通过 pip 全局安装(需要 Python >= 3.11) pip install feishu-docx必须先配置飞书凭证:
feishu-docx config set --app-id <APP_ID> --app-secret <APP_SECRET>
然后停止并等待用户配置好环境。
第 3 步:预处理 Mermaid 块
feishu-docx 工具无法处理 Mermaid 代码块。上传前,请检查 Markdown 是否包含 ```mermaid 代码块,并先将其转换为图片。
3a:扫描 Mermaid 块
读取 Markdown 文件,检查其中是否包含 ```mermaid 围栏代码块。如果未找到,则跳到第 4 步。
3b:创建临时副本
将原始 Markdown 文件复制到同一目录下的临时文件中(这样相对图片路径仍然有效):
<original-name>.feishu-tmp.md
例如:blog_post.md → blog_post.feishu-tmp.md
之后的所有修改都在此临时副本中进行。原始文件绝不会被修改。
3c:将 Mermaid 图表渲染为 PNG
对于临时文件中的每个 ```mermaid ... ``` 块,使用 mermaid.ink API 将其渲染为 PNG 图片:
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())
重要: 必须设置 User-Agent 请求头——否则 mermaid.ink 会返回 403。
将渲染后的图片保存到与 Markdown 文件相同的目录中,并根据图表内容使用具有描述性的文件名:
- 好:
mermaid-architecture-overview.png、mermaid-data-flow.png - 不好:
mermaid-1.png、diagram.png
3d:将 Mermaid 块替换为图片引用
在临时副本中,将每个 ```mermaid ... ``` 块替换为 Markdown 图片引用:

使用从临时文件到渲染后图片的相对路径。
3e:使用临时文件上传
从此处开始,第 4 步中的 <MARKDOWN_FILE_PATH> 指的是临时文件。
第 4 步:运行命令
- 从 Markdown 文件所在的目录运行(或从其相对图片路径能够正确解析的目录运行),以确保本地图片引用有效。
- 该工具将:
- 将 Markdown 块转换为飞书格式
- 自动上传 Markdown 中引用的本地图片
- 等待约 10 秒,确保块内容一致后再上传图片
第 5 步:清理
如果在第 3 步创建了临时文件:
- 删除临时 Markdown 文件(
*.feishu-tmp.md) - 删除第 3c 步创建的所有 Mermaid PNG 文件(它们仅用于上传)
第 6 步:报告结果
向用户显示:
- 转换的块数和上传的图片数
- 创建的文档 ID
- 成功或失败状态
如果因身份验证错误而失败,请提醒用户配置凭证:
feishu-docx config set --app-id <APP_ID> --app-secret <APP_SECRET>