mcpField
M
media-forge

media-forge

本地服务
github.com/PavelGuzenfeld媒体与设计17 周前更新

关于 media-forge

media-forge 是面向 AI 编码 Agent 的 MCP 服务,可将文本形式的图表、HTML 和幻灯片输入转为 Markdown 文档可用的文件。它返回文件路径,并提供输入校验和结构化错误。

主要功能

  1. 01渲染 Mermaid、D2 和 Graphviz 图表
  2. 02将 Vega-Lite 图表生成为 SVG 或 PNG
  3. 03创建带主题的独立 HTML 页面
  4. 04制作带导航的 HTML 幻灯片
  5. 05校验输入并返回结构化错误

适用场景

  1. 01将渲染后的图表加入项目 README
  2. 02为技术文档制作数据图表
  3. 03生成独立的项目报告页面
  4. 04根据幻灯片数据制作可导航演示文稿

MCP 相关

MCP 客户端可调用 `render_mermaid`、`render_chart`、`render_html_page` 和 `list_assets` 等渲染及实用工具。服务会返回生成文件的路径,以便嵌入文档。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"pavelguzenfeld-media-forge": {
"command": "npx",
"args": [
"-y",
"mcp-media-forge"
]
}
}
}
启动命令npx -y mcp-media-forge

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npmmcp-media-forge0.2.0

工具

8

收录的工具列表 · 更新于 2 周前

参数类型必填说明
tool_namestring是要获取指南的工具:“mermaid”、“d2”、“graphviz”、“vegalite”、“html_page”、“slides”或“all”

详细介绍

MCP Media Forge

npm MCP Registry License: MIT

可根据文本 DSL 生成图表、HTML 页面和幻灯片的 MCP 服务,专为将内容嵌入 Markdown 的 AI 编码 Agent 打造。

大模型 Agent 可通过 render_mermaid、render_html_page 或 render_slides 等工具提供文本输入,并获取可嵌入文档的资源文件路径。

输出示例

Mermaid 流程图
Mermaid 流程图
Mermaid 时序图
Mermaid 时序图
D2 架构图
D2 架构图
Graphviz 依赖关系图
Graphviz 依赖关系图
Vega-Lite 柱状图
Vega-Lite 柱状图

工具

图表渲染器(Docker)
工具输入格式用途
render_mermaidMermaid 代码SVG、PNG流程图、时序图、ER 图、状态图、甘特图、Git 图
render_d2D2 代码SVG、PNG带容器和图标的架构图
render_graphvizDOT 代码SVG、PNG依赖关系图、网络图
render_chartVega-Lite JSONSVG、PNG柱状图、折线图、散点图、面积图、热力图
HTML 生成器(无需 Docker)
工具输入输出用途
render_html_pageHTML 正文 + 主题独立 HTML技术文档、报告、仪表板
render_slidesJSON 幻灯片数组 + 主题HTML 幻灯片演示文稿、状态更新、操作演示
实用工具
工具描述
get_tool_guide每个工具的用法示例、反模式和复杂度限制
list_assets列出输出目录中的所有生成文件

快速开始

1. 启动渲染容器(用于图表工具)
cd docker
docker compose up -d

HTML 页面和幻灯片工具无需 Docker 即可运行。

2. 安装 MCP 服务

选项 A -- 使用 npx(无需安装)

npx mcp-media-forge

选项 B -- 克隆并构建

git clone https://github.com/PavelGuzenfeld/mcp-media-forge.git
cd mcp-media-forge
npm install
npm run build
3. 在 MCP 客户端中注册

任何兼容 MCP 的客户端(Claude Code、Cursor、VS Code + Copilot、Cline 等)都可以使用此服务。标准配置如下:

{
  "mcpServers": {
    "media-forge": {
      "command": "node",
      "args": ["/path/to/mcp-media-forge/dist/index.js"],
      "env": {
        "PROJECT_ROOT": "/path/to/your/project"
      }
    }
  }
}

根据客户端的不同,配置位置也不同:

  • Claude Code:~/.claude/settings.json
  • Cursor:MCP 设置面板
  • VS Code (Copilot):.vscode/mcp.json
  • Cline:MCP 服务配置
4. 使用

让 AI 助手生成图表、页面或演示文稿:

“创建一张展示 OAuth2 流程的时序图,并将其嵌入 README”

“生成一个 HTML 页面,用 KPI 卡片概述 API 架构”

“制作一套包含我们 Q1 指标和架构概览的幻灯片”

Agent 会调用相应的工具,获取文件路径,并将其嵌入 Markdown。

工作原理

AI Agent (any MCP client)
    |
    | MCP Protocol (JSON-RPC over stdio)
    v
MCP Media Forge (Node.js on host)
    |
    |--- Diagrams: docker exec (sandboxed, no network)
    |       |
    |       v
    |   Rendering Container
    |     ├── mmdc       (Mermaid CLI + Chromium)
    |     ├── d2         (D2 diagrams)
    |     ├── dot/neato  (Graphviz)
    |     └── vl2svg     (Vega-Lite via vl-convert)
    |
    |--- HTML/Slides: template engine (no Docker)
    |       |
    |       v
    |   CSS Design System (4 themes, depth tiers, components)
    |
    v
docs/generated/
  mermaid-a1b2c3.svg
  d2-7f8e9a.svg
  html_page-d4e5f6.html
  slides-8b9c0d.html

关键设计决策:

  • 输入文本,输出文件路径 -- 返回相对路径,绝不返回 base64 数据块
  • 基于内容哈希命名 -- 相同输入 = 相同文件 = 免费缓存 + 便于 Git 管理
  • 优先使用 SVG -- 矢量格式、文件小,且在 Git 中差异清晰
  • Docker 隔离 -- 图表渲染器在沙盒容器中运行,并设置 network_mode: none
  • 独立 HTML -- 页面和幻灯片没有外部依赖(CSS/JS 均内联)
  • 输入预校验 -- 在 Docker 往返调用之前捕获常见错误
  • 结构化错误 -- 错误响应包含 error_type、error_message 和 suggestion,便于大模型自我纠正

工具参考

get_tool_guide

渲染前获取任意工具的使用指南。返回示例、应避免的反模式、复杂度限制和提示。

{ "tool_name": "mermaid" }

可用指南:mermaid、d2、graphviz、vegalite、html_page、slides,或使用 all 获取摘要。

render_mermaid
{
  "code": "flowchart TD\n    A[Start] --> B{Decision}\n    B -->|Yes| C[Done]",
  "format": "svg",
  "theme": "default"
}
参数类型默认值描述
code字符串必填Mermaid 图表代码(必须以图表类型开头)
formatsvg | pngsvg输出格式
themedefault | dark | forest | neutraldefaultMermaid 主题

预验证会检查: 缺少图表类型、分号、标签中的 HTML、超过 25 个节点。

render_d2
{
  "code": "client -> server -> database",
  "format": "svg",
  "layout": "dagre"
}
参数类型默认值描述
code字符串必填D2 图表代码
formatsvg | pngsvg输出格式
theme数字--主题 ID(0=默认,1=中性灰,3=终端)
layoutdagre | elk | taladagre布局引擎

预验证会检查: Mermaid/D2 语法混淆、大括号不匹配、嵌套深度超过 3 层。

render_graphviz
{
  "dot_source": "digraph G { A -> B -> C }",
  "engine": "dot",
  "format": "svg"
}
参数类型默认值描述
dot_source字符串必填Graphviz DOT 源代码
enginedot | neato | fdp | sfdp | twopi | circodot布局引擎
formatsvg | pngsvg输出格式

预验证会检查: 缺少图形包装器、无向图中出现 ->、大括号不匹配。

render_chart
{
  "spec_json": "{\"$schema\":\"https://vega.github.io/schema/vega-lite/v5.json\",\"data\":{\"values\":[{\"x\":1,\"y\":10}]},\"mark\":\"bar\",\"encoding\":{\"x\":{\"field\":\"x\"},\"y\":{\"field\":\"y\"}}}",
  "format": "svg"
}
参数类型默认值描述
spec_json字符串必填Vega-Lite JSON 规范
formatsvg | pngsvg输出格式
scale数字1PNG 输出的缩放系数

预验证会检查: JSON 无效、缺少 $schema/data/mark、内联数据行超过 500 行。

render_html_page

生成自包含的主题 HTML 页面。无需 Docker。

{
  "title": "System Overview",
  "body_html": "<section id=\"metrics\"><h2>Metrics</h2><div class=\"mf-grid mf-grid-3\">...</div></section>",
  "theme": "swiss",
  "description": "Q1 architecture overview",
  "nav_sections": ["Metrics", "Architecture", "Roadmap"]
}
参数类型默认值描述
title字符串必填页面标题
body_html字符串必填HTML 正文内容(仅限内部内容,不含 <html>/<head>/<body>)
themeswiss | midnight | warm | terminalswiss视觉主题
description字符串--页面描述(meta 标签 + 页眉)
nav_sectionsstring[]--用于浮动 IntersectionObserver 导航的版块名称

设计系统 CSS 类:

类用途
mf-hero主要高亮区块(大阴影)
mf-elevated次要高亮区块(中等阴影)
mf-card带边框的内容卡片
mf-recessed弱化显示的内容
mf-grid mf-grid-2响应式双列网格
mf-grid mf-grid-3响应式三列网格
mf-split两个等宽列
mf-kpi + mf-kpi-value + mf-kpi-label关键指标展示
mf-badge-success/warning/error/info状态徽章

主题:

主题样式适用场景
swiss白色、几何风格、蓝色点缀技术文档
midnight深海军蓝、衬线字体、金色点缀演示文稿
warm奶油色纸张、粗体无衬线字体、陶土色点缀报告
terminal深色、等宽字体、青色点缀开发者内容
render_slides

生成可独立运行的 HTML 幻灯片,支持键盘和触控导航。无需 Docker。

{
  "title": "Q1 Review",
  "slides": "[{\"title\":\"Q1 Review\",\"content\":\"Engineering update\",\"type\":\"title\"},{\"title\":\"Metrics\",\"content\":\"<ul><li>99.9% uptime</li></ul>\",\"type\":\"content\"}]",
  "theme": "midnight",
  "author": "Engineering Team"
}
参数类型默认值描述
titlestring必填演示文稿标题
slidesstring必填幻灯片对象的 JSON 数组
themeswiss | midnight | warm | terminalswiss视觉主题
authorstring--作者(显示在标题幻灯片上)

幻灯片类型:

类型布局适用场景
title居中的大字文本 + 副标题开场/结束幻灯片
section居中的标题 + 描述主题分隔页
content标题 + 正文(项目符号、文本)大多数内容
split标题 + 两栏前后对比、比较
code标题 + 代码块代码讲解
quote大型引用块 + 出处用户评价、重要引语
kpi标题 + 自动网格指标仪表板、统计数据
image标题 + 居中图像截图、图表

**导航:**方向键、空格、PageUp/PageDown、Home/End。触控:向左/向右滑动。点击圆点即可跳转。

list_assets
{ "directory": "" }

返回包含所有生成文件的 JSON 数组,其中含有名称、路径、大小和修改时间。

错误处理

所有工具都会返回结构化错误,帮助大模型自行纠正:

{
  "status": "error",
  "error_type": "syntax_error",
  "error_message": "First line must declare diagram type. Got: \"A --> B\"",
  "suggestion": "Start with: flowchart TD, sequenceDiagram, erDiagram, ... See https://mermaid.js.org/syntax/"
}

错误类型:syntax_error、rendering_error、dependency_missing。

预验证会在调用渲染器之前捕获常见的大模型错误:

  • Mermaid:缺少图表类型、分号、HTML 标签、旧版 graph 语法
  • D2:与 Mermaid 语法混淆(-->、subgraph)、花括号不匹配
  • Graphviz:缺少 digraph/graph 包装结构、无向图中使用 ->
  • Vega-Lite:JSON 无效、缺少必需字段、内联数据过大

环境变量

变量默认值描述
PROJECT_ROOTcwd()用于解析输出路径的项目根目录
OUTPUT_DIRdocs/generated相对于 PROJECT_ROOT 的输出目录
MEDIA_FORGE_CONTAINERmedia-forge-rendererDocker 容器名称

开发

npm install
npm run build          # Build with tsup
npm run dev            # Watch mode
npm test               # Run all tests (95 total)
npm run test:unit      # Unit tests only (no Docker needed)
npm run test:component # Integration tests (Docker tools need container)
npm run lint           # Type-check with tsc
运行集成测试
cd docker && docker compose up -d   # Start renderer (diagram tools only)
cd .. && npm run test:component     # All integration tests

HTML 页面和幻灯片集成测试无需 Docker 即可运行。

示例

请参阅 examples/ 中的示例输入文件:

文件工具描述
mermaid/flowchart.mmdrender_mermaid决策流程图
mermaid/sequence.mmdrender_mermaid客户端-服务端时序图
d2/architecture.d2render_d2包含容器的后端架构
graphviz/dependencies.dotrender_graphviznpm 依赖关系图
vegalite/bar-chart.jsonrender_chart工具性能比较

请参阅 examples/README.md,了解 MCP 工具调用示例和预期响应。

许可证

MIT

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。