关于 2d Games Assets Generator
2d-assets-mcp 为游戏开发者生成可配置的 PNG 占位图,用于原型阶段测试视觉和玩法。它支持单张素材和精灵图集,并嵌入 JSON 元数据,供无视觉能力的 AI 模型读取。
主要功能
- 01生成可配置的 PNG 占位图
- 02创建单张素材或精灵图集
- 03应用渐变、图案、透明度和文字
- 04制作部分填充的生命值条和进度条
- 05嵌入并读取 JSON 素材元数据
适用场景
- 01在最终美术制作前模拟游戏界面
- 02用精灵图集测试动画时序
- 03创建占位角色图和道具图
- 04让无视觉能力的 AI 读取素材描述
MCP 相关
向 MCP 客户端提供生成 PNG 素材和批量素材的工具,并支持读取嵌入的元数据。生成的文件会写入指定目录。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
3收录的工具列表 · 更新于 3 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| filename | string | 是 | 文件名,例如 'player_idle.png' |
| directory | string | 是 | 目标项目文件夹的绝对路径 |
| text | string | 是 | 要在资源上显示的文本 |
| assetDescription | string | 否 | 以图像元数据形式存储的资源可读描述。可帮助不具备视觉能力的模型之后理解该资源。例如:'Player idle placeholder, blue rectangle 128x128' |
| color | string | 是 | 背景十六进制颜色代码,例如:'#FF5733' |
| width | number | 否 | 像素宽度。未提供时默认为 128。 |
| height | number | 否 | 像素高度。未提供时默认为 128。 |
| shape | enum | 否 | 资源的几何形状。未提供时默认为矩形。rectangle | rounded-rectangle | circle |
| opacity | number | 否 | 背景形状的不透明度,范围为 0.0(透明)到 1.0(不透明)。未提供时默认为 1.0。 |
| fillPercent | number | 否 | 资源的填充百分比,可用于生命值条或进度条(0-100)。默认值为 100。 |
| trackColor | string | 否 | 当 fillPercent < 100 时,资源未填充部分的背景颜色。十六进制代码,例如:'#333333' |
| textPosition | enum | 否 | 文本的垂直对齐方式。未提供时默认为居中。center | top | bottom |
| fontSize | number | 否 | 可选的显式字体大小,单位为像素。若省略,则会自动缩放以适配。 |
| strokeColor | string | 否 | 资源边框的十六进制颜色代码。未提供时默认为 #000000。 |
| strokeWidth | number | 否 | 资源边框的像素宽度。设为 0 表示无边框。未提供时默认为 4。 |
| textRotation | number | 否 | 文本的旋转角度(度)。未提供时默认为 0。 |
| fillMode | enum | 否 | 背景填充模式。未提供时默认为 solid。solid | linear-gradient | radial-gradient |
| secondaryColor | string | 否 | 用于渐变的辅助颜色。省略时,将使用从 color 派生的变体。 |
| gradientAngle | number | 否 | 线性渐变的角度(度)。径向渐变时忽略。未提供时默认为 45。 |
| pattern | enum | 否 | 可选的图案叠加层。未提供时默认为 none。none | stripes | dots | grid |
| patternColor | string | 否 | 图案颜色。省略时,将使用派生的对比色。 |
| patternOpacity | number | 否 | 图案叠加层的不透明度,范围为 0.0 到 1.0。未提供时默认为 0.18。 |
| patternScale | number | 否 | 图案平铺尺寸(像素)。未提供时默认为 16。 |
| textColor | string | 否 | 文本的可选十六进制颜色。省略时,将根据背景自动计算对比色(黑色或白色)。 |
详细介绍
2d-assets-mcp
在设计美术之前,先设计游戏的手感。
就像线框图能帮助设计师在动笔绘制之前直观了解用户流程一样,2d-assets-mcp 能帮助游戏开发者预览时序、每秒帧数(FPS)、碰撞边界和 UI 布局,而不必花费数小时制作最终美术素材。
这个 MCP(模型上下文协议) 服务可让任何 AI 助手(Antigravity、Claude Code、Codex、Devin,或任何兼容 MCP 的助手)直接在你的项目文件夹中生成高级 2D 模拟/占位素材,并以 PNG 格式保存。借助 2d-assets-mcp 节省时间、加快原型制作,完善游戏手感,等准备就绪后再用原创美术替换模拟素材。
这个 MCP 与游戏引擎无关,可与任何支持导入 PNG 的游戏引擎完美配合,例如:
- Godot
- Unity
- Unreal Engine
- GameMaker
- Construct
- RPG Maker
- 还有许多其他引擎!
节省时间,创建占位生命值条、精灵图集和你能想到的各种 UI 元素,并全面支持渐变、图案、透明度、文字旋转和自动缩放;整个过程只需聊天,无需打开图像编辑器。 它的设计初衷是帮助你先测试并迭代游戏手感:通过原型测试缩放、跳跃弧线和动画时序,不必等待最终美术素材,同时也能轻松调整。需要把占位按钮放大 20%?只需让你的 AI 客户端重新生成即可。
提示
2d-assets-mcp 带有适合 AI 使用的元数据 → 也就是说,每个生成的 PNG 都会在其 EXIF 数据中直接嵌入丰富的 JSON 元数据(尺寸、颜色、形状、渐变属性、图案详情、文字属性、描边属性、描述),因此不具备视觉能力的 AI 模型也能理解素材包含的内容。
生成素材示例
以下是此 MCP 服务生成的一些素材示例:


角色精灵与动画
英雄待机动画(8 帧,512x64)

带特效的 8 帧待机动画精灵图集
UI 元素
攻击按钮(128×48)

带红色渐变、圆角和“ATTACK”标签的按钮
生命值条(200×24)

填充 75% 的生命值条,采用绿色填充和深灰色轨道
游戏道具
金币(32×32)

带径向渐变、圆点图案叠加和“COIN”标签的圆形金币
草地和水面

树木

动画精灵图集
火焰动画(4 帧,192x48)

4 帧精灵图集
安全注意事项
素材内容
- 生成的素材是纯占位图形,不包含恶意代码。
- 嵌入的元数据是纯文本 JSON,不可执行。
由于此 MCP 服务会直接在你的计算机上写入文件以节省时间,请遵循以下安全最佳实践:
文件系统访问
- 服务器可以将文件写入 AI 助手指定的任意路径。
- 建议: 将 AI 客户端配置为严格限制对游戏项目目录的访问权限。
- 警告: 请求 AI 在项目目录之外生成资源时,请务必谨慎。
路径遍历
- 此服务器会验证路径,但使用 MCP 服务时仍应始终留意潜在的路径遍历尝试,并在确认操作前检查生成的文件路径。
最佳实践
- 在配置中使用绝对路径,以避免歧义。
- 仅允许 AI 访问游戏项目目录。
- 在提交到版本控制前检查生成的资源。
- 保持 Node.js 依赖项为最新版本。
核心功能
- 即时生成资源:一次工具调用生成一张 PNG,并完整配置视觉效果。
- 精灵表与批量模式:在一次请求中生成多帧,或将多帧合成为单个动画条精灵表。
- 丰富的视觉效果:支持纯色填充、线性/径向渐变、条纹/圆点/网格图案叠加、圆角、圆形、不透明度和描边控制。
- 动态 UI 元素:使用
fillPercent和trackColor为部分填充的资源创建部分填充的进度条/生命值条。 - 自动缩放标签:文本会自动缩放以适应资源;如有需要,也可以通过显式设置
fontSize覆盖此行为。 - 适用于非视觉 AI:无需加载图像像素,即可通过
read_image_metadata读取嵌入的 JSON 元数据,非常适合非视觉 AI 工作流。 - 智能命名:输出文件会自动使用其尺寸命名(例如
player_idle_128x128.png),帮助无法查看图像的模型了解资源尺寸。
工具参考
此 MCP 服务为 AI 提供 3 个工具,用于生成和读取 2D 资源元数据。
1. generate_mock_asset
生成单个 PNG 资源并写入磁盘。支持渐变、图案、透明度、文本旋转和嵌入元数据。
参数(点击展开)
必需参数
| 参数 | 类型 | 说明 |
|---|---|---|
filename | string | 输出文件名,例如 player_idle.png |
directory | string | 输出文件夹的绝对路径(如果不存在则创建) |
text | string | 显示在资源上的标签 |
color | string | 背景十六进制颜色,例如 #FF5733 |
可选参数: 形状与尺寸
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
width | number | 128 | 宽度,单位为像素 |
height | number | 128 | 高度,单位为像素 |
shape | rectangle | rounded-rectangle | circle | rectangle | 几何形状 |
opacity | number 0–1 | 1.0 | 背景不透明度 |
strokeColor | string | #000000 | 边框十六进制颜色 |
strokeWidth | number | 4 | 边框宽度,单位为 px;设为 0 可移除边框 |
可选参数: 填充与渐变
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
fillMode | solid | linear-gradient | radial-gradient | solid | 背景填充类型 |
secondaryColor | string | auto-derived | 第二个渐变色标;若未指定,则根据 color 自动生成阴影色 |
gradientAngle | number | 45 | 线性渐变的角度(度);径向渐变会忽略此参数 |
可选参数: 进度条/健康条
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
fillPercent | number 0–100 | 100 | 资源的填充比例(从左到右) |
trackColor | string | — | 未填充部分的颜色;若未指定则为透明 |
可选参数: 图案叠加
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
pattern | none | stripes | dots | grid | none | 叠加图案类型 |
patternColor | string | auto-derived | 图案颜色;若未指定,则自动选择对比色 |
patternOpacity | number 0–1 | 0.18 | 图案叠加的不透明度 |
patternScale | number ≥2 | 16 | 图案平铺尺寸(像素) |
可选参数: 文本
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
textPosition | center | top | bottom | center | 文本垂直对齐方式 |
fontSize | number | auto-scaled | 显式指定的字号(像素);若未指定则自动适配 |
textRotation | number | 0 | 文本旋转角度(度) |
textColor | string | auto-contrasting | 文本的十六进制颜色;若未指定则自动计算 |
可选参数: 元数据
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
assetDescription | string | — | 嵌入 PNG EXIF 的人类可读描述,用于非视觉 AI 上下文 |
说明
输出文件名格式
服务会在写入前自动将尺寸追加到文件名中:
player_idle.png → player_idle_128x128.png
2. generate_mock_asset_batch
在一次请求中生成多个资源。支持生成多个独立 PNG 文件,或合成为一张精灵图。
参数(点击展开)
必填参数
| 参数 | 类型 | 描述 |
|---|---|---|
assets | AssetConfig[] | 资源配置数组(字段与 generate_mock_asset 相同) |
可选参数
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
spritesheetMode | individual \ spritesheet | spritesheet | individual 会分别写入 PNG 文件;spritesheet 会合成为一张 PNG |
sheetFilename | string | spritesheet.png | 合成精灵图的输出文件名 |
sheetDirectory | string | first asset's directory | 精灵图的输出目录 |
sheetMargin | number | 8 | 精灵图周围的外边距(像素) |
sheetSpacing | number | 8 | 动画帧之间的间距(像素) |
说明
精灵图布局
所有资源都排列在同一行中(传统动画条)。每个帧单元格的尺寸与批次中最大的资源相同;较小的资源会在其单元格内居中。输出文件名包含精灵图的总尺寸:
player_run.png → player_run_648x136.png
3. read_image_metadata
读取此服务生成的任意 PNG 文件中嵌入在 EXIF ImageDescription 字段里的 JSON 元数据。对于不具备视觉能力的 AI 模型很有用,因为无需解码图像,它们也能了解资源包含的内容。
参数(点击展开)
必填参数
| 参数 | 类型 | 描述 |
|---|---|---|
filepath | string | PNG 文件的绝对路径 |
元数据嵌入方式
元数据以 JSON 字符串的形式存储在 PNG 的 EXIF IFD0.ImageDescription 字段中,使用 sharp 库的 withMetadata API。
读取时会有意绕过标准 TIFF 字节遍历:不解析二进制 TIFF 结构,而是将原始 EXIF 缓冲区作为 UTF-8 字符串扫描,查找已知的 "generator":"2d-assets-mcp" 键,然后提取其周围的 JSON 对象。这使读取器不受不同 PNG 写入器带来的 TIFF 填充、字节序差异和特殊 IFD 布局的影响。
响应示例(点击展开)
{
"generator": "2d-assets-mcp",
"type": "asset",
"name": "player_idle",
"width": 128,
"height": 128,
"color": "#4A90E2",
"shape": "rounded-rectangle",
"fillMode": "linear-gradient",
"fillPercent": 100,
"trackColor": null,
"pattern": "none",
"secondaryColor": "#2E5A8A",
"gradientAngle": 45,
"textRotation": 0,
"textPosition": "center",
"strokeColor": "#000000",
"strokeWidth": 4,
"description": "Player idle placeholder, blue rounded rectangle 128x128",
"createdAt": "2025-01-15T10:30:00.000Z"
}
精灵图元数据字段(精灵图文件额外返回的字段)
{
"generator": "2d-assets-mcp",
"type": "spritesheet",
"totalWidth": 648,
"totalHeight": 136,
"columns": 4,
"rows": 1,
"frameCount": 4,
"frameWidth": 128,
"frameHeight": 128,
"margin": 8,
"spacing": 8,
"frames": [
{
"index": 0,
"x": 8,
"y": 8,
"width": 128,
"height": 128,
"name": "frame_0",
"color": "#4A90E2",
"shape": "rounded-rectangle"
}
],
"createdAt": "2025-01-15T10:30:00.000Z"
}
面向 AI 的示例提示词
连接到 AI 编码助手后,试试这些提示词来加快工作流:
单个素材
“在
C:\Users\me\project\assets\sprites\(Windows)、/home/me/project/assets/sprites/(Linux)或/Users/me/project/assets/sprites/(macOS)中,为我的玩家角色创建一个 128×128 的蓝色圆角矩形占位图。标注为 ‘Player’,并添加径向渐变。”
生命值条
“在项目的 UI 文件夹中生成一个 200×24 像素的生命值条 PNG,填充 65%,使用细描边、红色填充和深灰色轨道。将文件命名为
health_bar.png。”
精灵图集
“为我的玩家创建一个包含 4 帧的奔跑循环精灵图集。每帧应为 64×64,使用不同深浅的蓝色,并标注为 Frame 1 到 Frame 4。将其保存到项目的精灵文件夹中。”
读取元数据
“读取项目精灵文件夹中
player_idle_128x128.png的元数据。”
安装
选项 1:直接使用 npx(无需安装)
将其连接到任意 AI 编码助手的最快方式:
{
"mcpServers": {
"2d-assets": {
"command": "npx",
"args": ["-y", "2d-assets-mcp"]
}
}
}
选项 2:使用包管理器(pnpm、npm、yarn)手动安装
1. 克隆仓库
git clone https://github.com/crony-io/2d-assets-mcp.git
cd 2d-assets-mcp
2. 安装依赖项
pnpm install # recommended
# or: npm install
# or: yarn install
3. 构建项目
pnpm run build
# or: npm run build
# or: yarn run build
4. 配置 MCP 客户端
{
"mcpServers": {
"2d-assets-mcp": {
"command": "node",
"args": ["/absolute/path/to/2d-assets-mcp/dist/index.js"]
}
}
}
选项 3:使用 pnpm 或 npm 全局安装
本项目适用于任意 Node.js 包管理器。请选择你偏好的包管理器:
npm
npm install -g 2d-assets-mcp
pnpm
pnpm add -g 2d-assets-mcp
然后引用已安装的二进制文件:
{
"mcpServers": {
"2d-assets": {
"command": "2d-assets-mcp"
}
}
}
Claude Code / Claude Desktop
将以下内容添加到 Claude Code/Claude Desktop 的 MCP 设置中:
{
"mcpServers": {
"2d-assets-mcp": {
"command": "node",
"args": ["/absolute/path/to/2d-assets-mcp/dist/index.js"]
}
}
}
Devin
将以下内容添加到 Devin 的 MCP 设置(mcp_config.json)中:
{
"mcpServers": {
"2d-assets-mcp": {
"command": "node",
"args": ["/absolute/path/to/2d-assets-mcp/dist/index.js"],
"disabled": false
}
}
}
Cursor
在项目中创建 .cursor/mcp.json:
{
"mcpServers": {
"2d-assets-mcp": {
"command": "node",
"args": ["/absolute/path/to/2d-assets-mcp/dist/index.js"]
}
}
}
开发
前置条件
- Node.js 18 或更高版本
- pnpm 8 或更高版本 或 npm 9 或更高版本(任意包管理器均可)
设置
git clone https://github.com/crony-io/2d-assets-mcp.git
cd 2d-assets-mcp
# Choose your package manager:
pnpm install # recommended
# or
npm install
# or
yarn install
脚本
| 命令 | 描述 |
|---|---|
npm run build / pnpm run build | 将 TypeScript 编译到 dist/ |
npm run dev / pnpm run dev | 通过 tsx 直接从源代码运行(无需构建) |
npm run start / pnpm run start | 从 dist/ 运行已编译的服务 |
npm run typecheck / pnpm run typecheck | 执行类型检查,不生成文件 |
npm run check / pnpm run check | 运行所有检查:格式、lint 和类型检查 |
添加新工具
- 创建
src/tools/yourTool.ts,并导出registerYourTool(server: McpServer)函数 - 在
src/server.ts中导入并调用该函数 - 将任何新的 Zod schema 添加到
src/schemas.ts,并将类型添加到src/types.ts
许可证
MIT — 完整文本请参阅 LICENSE。
贡献
欢迎提交问题和拉取请求。提交 PR 前,请务必:
- 运行
pnpm run check或npm run check(必须零错误)。 - 将新工具放在
src/tools/下的独立文件中。 - 在
src/types.ts中导出新类型,并在src/schemas.ts中导出 schema。 - 对于新增或变更的参数,请更新本 README 的 工具参考 部分。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。