game-asset-mcp
game-asset-mcp
一个 MCP 服务器,让 AI 代理能够端到端地生成可用于游戏的 3D 资产——参考图像、网格、PBR 纹理、来源信息——并为你已经拥有的网格重新贴图。
大多数资产生成工具止步于“输入提示词,获得网格”。那是容易的一半。真正阻碍项目的另一半是你已经拥有的网格:你上周建模的 kitbash、材质不符合你美术方向的市场道具、需要在周五前看起来像腐蚀钢的灰盒。texture_existing_asset 接受你提供的网格,并为其赋予新的 PBR 材质,而不会重新生成你已经批准的几何体。
一切都会被记录。每个任务都会保留提示词、种子、提供商模型版本、提供商任务 ID,以及每个下载字节的 SHA-256——这样六个月后你仍然能回答“这个文件是什么产生的?”
该服务器在设计上不依赖特定提供商。目前它驱动 Tripo 用于 3D,Leonardo.Ai 用于参考图像和音效,背后是三个小接口(ImageProvider、Model3DProvider、AudioProvider)。添加提供商不会改变工具表面。参见 docs/architecture.md 了解为何如此构建。
要求
Node.js >= 18.17 — 服务器使用全局
fetch、FormData、Blob和AbortController。无需原生模块、无需构建工具链、无需数据库。它可以在任何运行 Node 的地方运行。
可选: 本地安装 Blender 4.x+ 可启用
normalize_mesh和batch_prepare_meshes的修复功能。其他所有工具无需它即可工作;当它缺失时,工具会拒绝并给出说明。在 macOS 上,Blender 不在PATH中,因此请设置BLENDER_PATH或依赖捆绑的/Applications/Blender.app默认值。至少一个提供商 API 密钥(参见 配置)。一个就足够了——它们是惰性验证的。
Related MCP server: Context3D MCP Server
安装
直接从 GitHub 安装。两种形式都会在安装时构建 TypeScript,因此无论哪种方式你都能获得可运行的 game-asset-mcp 二进制文件。
# run it without installing anything permanently
npx github:theisegoria/game-asset-mcp
# or add it to a project
npm install github:theisegoria/game-asset-mcp
# pin a specific version — recommended for anything you depend on
npm install github:theisegoria/game-asset-mcp#v0.3.8固定版本。 如果没有 #vX.Y.Z 后缀,两种形式都会解析为当时 main 分支的内容,这不是稳定的依赖。每个版本都有标签,因此 #v0.3.8 会精确地给你那个树。版本列表见 github.com/theisegoria/game-asset-mcp/releases,每个版本都附带了该版本修复的缺陷。
⛔ 不要固定 v0.3.0、v0.3.1 或 v0.3.2。 后续审查发现这些版本中存在会破坏你传入的网格并报告成功的活动路径。它们被标记只是为了历史完整。它们的发布页面也说明了这一点。
或者从克隆版本开始,如果你想修改任何内容,这是你想要的:
git clone https://github.com/theisegoria/game-asset-mcp.git
cd game-asset-mcp
npm install
npm run build # emits dist/
node dist/server.js不在 npm 上。 没有
npm install @theisegoria/game-asset-mcp——该包仅从 GitHub 分发。任何其他说法都已过时。
服务器通过 stdio 进行 MCP 通信。直接在终端中启动它,它会静静地等待客户端与之通信——这是正确行为,不是挂起。日志输出到 stderr;stdout 属于协议。
配置
在你的 MCP 客户端的 env 块中设置这些——参见下面的代码片段。没有 .env 加载:服务器只读取 process.env,不读取其他内容,因此磁盘上的 .env 文件除非你的 shell 或客户端先导出它,否则不起作用。
变量 | 必需 | 默认值 | 用途 |
| 用于 3D 工具 | — | Tripo API 密钥。在 platform.tripo3d.ai 创建一个。 |
| 用于图像和音频工具 | — | 启用了 API 访问的 Leonardo.Ai 密钥。一个密钥同时覆盖参考图像和音效。 |
| 否 | 内置默认值 | 覆盖默认的 Leonardo 图像模型。也存在每次调用的 |
| 否 |
| 资产和任务记录的写入位置。相对于服务器的工作目录。 |
| 否 |
| 任何单个下载的硬性上限,在流式传输时强制执行——也适用于你提供的任何本地文件,因此过大的你已有的网格会被拒绝并返回 |
| 否 |
| 每次请求的 HTTP 超时。 |
| 否 |
|
|
| 否 | 自动检测 | 用于 |
| 否 | Tripo v3 端点 | 重定向 3D 提供商。必须是 |
| 否 | Leonardo 端点 | 重定向图像/音频提供商。必须是 |
| 否 | 无限制 | 会话支出上限,单位为美分。消耗信用的工具在达到上限后会拒绝,且不会联系提供商。 |
⚠️ Tripo API 信用与 Tripo Studio 订阅分开计费
这几乎会坑到所有人。Tripo Studio 网页订阅不会为 API 调用提供资金。 它们是两个不同的产品,有两个不同的余额。如果你一直在 Studio 网页应用中愉快地生成模型,而你的第一次 create_3d_asset 调用因信用不足而被拒绝,那么你没有配置错误——你需要在开发者平台上购买 API 信用。请在 platform.tripo3d.ai 购买,而不是在 Studio 应用中。
限制可花费的金额
设置 ASSET_SPEND_LIMIT_CENTS 后,每个消耗信用的工具都会在联系提供商之前检查它——包括在上传网格或参考图像之前——拒绝时会指明剩余余额,而不是超支。上限以美分为单位,因为两个提供商以不同单位计费——Tripo 以 $0.01 信用计费,Leonardo 以美元计费——混合使用它们的限额将毫无意义。
如果提供商公布了每次调用的价格,我们会使用它。如果没有,守卫会使用一个故意保守的占位值,get_spend_report 会说明哪些数字是哪种。它是一个守卫,不是发票:实际费用应等于或低于估计值,绝不会高于。
一个提供商就足够了
凭据是惰性验证的,在工具需要它们时才验证,绝不会在启动时验证。如果你只设置了 TRIPO_API_KEY,服务器会正常启动,所有 3D 工具都能工作;图像工具会返回一个明确的 CONFIG_MISSING 错误,指出你缺少的变量。反之亦然。你永远不会被迫持有你不想要的账户,只为了使用你想要的管道的一半。
MCP 客户端设置
Claude Code / Claude Desktop
添加到你的 MCP 配置中(claude_desktop_config.json,或 Claude Code 项目中的 .mcp.json):
{
"mcpServers": {
"game-asset": {
"command": "node",
"args": ["/absolute/path/to/game-asset-mcp/dist/server.js"],
"env": {
"TRIPO_API_KEY": "tsk_...",
"LEONARDO_API_KEY": "...",
"ASSET_OUTPUT_DIR": "/absolute/path/to/your/project/assets/generated",
"ASSET_LOG_LEVEL": "info"
}
}
}
}对 args 和 ASSET_OUTPUT_DIR 使用绝对路径。MCP 客户端的工作目录不是你想的那个,相对输出目录会把资产散落到意想不到的地方。
任何其他 MCP 客户端
同一个服务器,通用描述——一个 stdio 子进程:
{
"name": "game-asset",
"transport": "stdio",
"command": "npx",
"args": ["-y", "github:theisegoria/game-asset-mcp"],
"env": {
"TRIPO_API_KEY": "tsk_...",
"LEONARDO_API_KEY": "...",
"ASSET_OUTPUT_DIR": "/absolute/path/to/assets/generated"
}
}可用工具
工具 | 消耗积分 | 功能 |
| 否 | 试运行。显示某个规格会生成的确切提示词和负面提示词,以便在支付任何费用之前修正美术方向。 |
| 是 | 将资产规格转换为为重建而构建的参考图——孤立主体、完整轮廓、平光、纯色背景。创建资产任务。 |
| 是 | 在保持物体身份不变的前提下,沿单一维度(轮廓、材质处理、细节、磨损、比例、功能组件)进行探索。 |
| 否 | 标记 3D 步骤将重建哪张参考候选图。仅限本地记录。 |
| 是 | 从所选参考图重建带 PBR 纹理的网格——或在没有参考图时直接从文本重建。立即返回一个可轮询的任务。 |
| 是 | 为你已拥有的网格(GLB/GLTF/FBX/OBJ/STL)或之前生成的网格应用新的 PBR 材质。几何体保持不变。 |
| 否 | 轮询任务。将提供方的状态词汇映射到统一的标准化生命周期,并同时保留原始状态。 |
| 否 | 将提供方的模型、纹理和预览渲染图获取到你的工作区,并对每个文件进行哈希和记录。 |
| 否 | 读取已下载的 glTF/GLB 并报告其中实际包含的内容——网格、材质、纹理通道、尺寸。 |
| 否 | 将 glTF 材质拆分为独立的 albedo、normal 和 roughness 图像,解包 metallicRoughness(roughness = 绿色通道,metallic = 蓝色通道)。重采样到精确尺寸,在线性光下对颜色取平均,数据通道直接处理。 |
| 否 | 修复网格使其可用:为没有 UV 的对象生成 UV(网格无法贴图的最常见原因)、焊接重合顶点、消除退化三角形、为每个材质命名并强制不透明混合。可选 Blender 依赖。 |
| 是 | 根据描述生成短游戏音效——打击、武器音效、UI 提示音或无缝环境循环。内联轮询并下载。 |
| 是 — 仅图像 | 意图导向的入口:输入自然语言请求,输出资产规格加参考候选。刻意停在 3D 花费之前,以便由人或代理先选择参考图。 |
| 否 | 以紧凑摘要形式列出已知任务,最新的在前。 |
| 是 | 为生成的资产构建骨骼和蒙皮权重,使其可被动画化。 |
| 是 | 将预设动画重定向到已绑骨的资产上。拒绝未绑骨的源,而不是白白计费。 |
| 是 | 重建拓扑,默认使用四边形——四边形在后续编辑和网格资格审核中的表现远优于生成器的三角形汤。 |
| 否 | 根据发布策略评判网格,返回通过/失败及逐项检查原因——UV、法线、切线、三角形预算、材质、纹理分辨率、包围盒合理性。所有阈值均可覆盖。 |
| 否 | 对列表中的 |
| 否 | 此工作区按工具统计的花费及剩余额度——以及每个数字是已发布价格还是保守占位值。 |
只有九个工具会花费你的钱,每个工具的描述中都在被调用前明确说明了这一点。
免费的本地部分(无需 API 密钥,无需网络)
二十个工具中有十一个从不消耗积分,而其中只有两个会使用网络——get_asset_job 用于轮询,download_asset 用于获取;两者都免费但属于网络调用。其余九个可离线工作。下面五个是网格管线,如果你已有网格,它们就是全部产品。
工具 | 回答什么问题 |
| 这个 glTF 里实际有什么?网格、材质、纹理通道、尺寸、边界。 |
| 这能发布吗?通过/失败及逐项检查原因,所有阈值均可覆盖。 |
| 修复它:为没有 UV 的对象生成 UV、焊接重合顶点、消除退化三角形、命名材质。 |
| 对 |
| 将材质拆分为 albedo / normal / roughness 图像,正确解包 metallicRoughness。 |
通常的循环是 validate → normalize → validate again,这样修复是被证明的而非假设的:
validate_game_asset modelPath=/art/crate.glb
→ fails: uvs_present ("nothing can texture this")
normalize_mesh modelPath=/art/crate.glb outputDir=/art/out
→ objectsUnwrapped=2, triangles 3183 → 1750
validate_game_asset modelPath=/art/out/crate_normalized.glb
→ passesbatch_prepare_meshes 对列表运行该循环并逐项报告。已通过的网格保持不变而非重写,单个坏文件绝不会中断运行,两个共享相同基名的源会得到不同的输出而非互相覆盖。
缺少 UV 是最值得了解的缺陷。 没有 UV 坐标的网格无法被任何工具贴图——不是这个工具,不是提供方,也不是你手动操作。生成器和市场资产经常不带 UV 就发布。validate_game_asset 因此将其列在首位。
规范化需要 Blender(4.x+)。没有它,工具仍可验证和报告,只是无法修复。在 macOS 上 Blender 不在 PATH 中,因此要么设置 BLENDER_PATH,要么依赖自带的 /Applications/Blender.app 默认路径。
示例工作流
完整管线:从想法到已检查的资产
1. generate_asset_reference → spends image credits, returns assetJobId + N candidates
2. (inspect the images) → look at the returned reference images and choose one
3. select_reference → free; records which candidate wins
4. create_3d_asset → spends 3D credits, returns a task to poll
5. get_asset_job → free; poll until status is "ready" (or "failed")
6. download_asset → free; pulls model + textures + previews into the workspace
7. inspect_asset → free; confirms what actually landed on disk第 2 步不是装饰。在花费 3D 积分之前选择参考图,正是管线在此处拆分的原因:糟糕的参考图会产生融化的网格,而你只有在支付重建费用之后才会发现。
重新贴图:更短、更便宜,也是大多数工具没有的流程
你已经拥有网格。无需参考、无需选择、无需重建:
1. texture_existing_asset → spends texturing credits on a mesh you supply
2. get_asset_job → free; poll until ready
3. download_asset → free
4. inspect_asset → free一次付费调用而非两次,而且你已批准的几何体会原样返回。
费用与副作用
消耗提供方积分的调用: generate_asset_reference、generate_reference_variations、create_3d_asset、texture_existing_asset、generate_sound_effect、rig_asset、animate_asset、retopologize_asset,以及 create_game_prop 内部的图像生成步骤。此服务器中的其他任何操作都不会产生费用。
免费的调用: select_reference、get_asset_job、download_asset、inspect_asset、list_asset_jobs、preview_asset_prompt、extract_pbr_trio、normalize_mesh、validate_game_asset、batch_prepare_meshes、get_spend_report。想轮询、检查、拆分和下载多少次都可以。
消耗额度的 POST 请求绝不会自动重试。 这是一条深思熟虑、承重墙级别的规则,它位于 HTTP 层,而不是每个调用点。当一个创建生成任务的请求失败时——超时、socket 重置、502——客户端无法判断提供方是否在连接断开前接受了该请求。重试可能是免费的;也可能让你为一个从未收到的网格付双倍费用。所以它不会重试,错误会直接返回,是否再次尝试的决定权在你。幂等读取——状态轮询、文件下载——可以带退避自由重试,因为重复执行它们不产生任何成本。
其他值得了解的副作用:
文件会写入磁盘。 下载的资产落在
ASSET_OUTPUT_DIR下,任何逃逸出工作区根目录的下载路径都会被拒绝。有三个工具不同,且是刻意为之:extract_pbr_trio、normalize_mesh和batch_prepare_meshes写入你指定的位置,包括工作区之外,因为它们操作的是你已经拥有的网格,而这些网格并不存在于资产生成目录中。给它们一个你确实想要的目标位置。download_asset和generate_sound_effect接受destination,它仅对这一次调用覆盖ASSET_OUTPUT_DIR。它仍然受约束:逃逸出给定根目录的路径会被拒绝。ASSET_OUTPUT_DIR应为绝对路径。 相对值会相对于服务器的工作目录解析,而该目录由你的 MCP 客户端决定——有几个客户端从/启动。服务器会拒绝启动,并给出一条消息,指明解析出的路径及其来源的工作目录。这一诊断覆盖了此问题实际可能产生的八种 errno——ENOENT、EACCES、EPERM、EROFS、ENOTDIR、ELOOP、ENAMETOOLONG 和 ENOSPC,包括ASSET_OUTPUT_DIR指向文件而非目录的情况。其他任何错误仍然原样传播。没有任何内容会被静默覆盖。 派生的输出名称会获得数字后缀(
crate、crate_2、……),而不是销毁你可能已经审阅过的结果,并且该名称通过独占创建来认领,因此同一批次中的两个条目不会争抢它。显式的outputPath在文件已存在时会被直接拒绝,除非你传入overwrite: true——而如果它解析到输入网格上,则无条件拒绝,没有任何退出选项。该解析会考虑符号链接、硬链接、大小写不敏感的卷,以及导出器重写扩展名的习惯,因为这里的每一种情况都曾毁掉过源网格。下载有上限,为
ASSET_MAX_DOWNLOAD_BYTES,且上限在流式传输过程中强制执行,而不是依据Content-Length头——一个谎报大小的服务器无法耗尽你的内存。仅限 HTTPS。 非 HTTPS 的 URL 会被直接拒绝,包括出现在提供方响应中的那些。
API 密钥会在日志中被集中脱敏,因此任何单独的日志调用点都无法泄露密钥。
工作区布局
每个资产都有一个自包含的目录。六个月后在文件浏览器中打开它,它仍然能自我解释:
assets/generated/
├── .jobs/ job records, one JSON file per job
│ └── asset_<uuid>.json
└── <asset_name>/
├── asset.json complete provenance: spec, prompt, seed,
│ model version, provider ids, file hashes
├── source/ the reference image(s) the mesh was built from
├── model/ the mesh (GLB by default)
├── textures/ extracted PBR maps
├── previews/ provider-rendered turnarounds<asset_name> 是你的 spec 名称经过清理后的结果:小写化,非字母数字字符折叠为下划线。.jobs 目录刻意做成点目录——浏览你的资产工作区时应该看到资产,而不是簿记文件。
故障排查
每个错误都携带一个机器可读的 error 字段,指明错误类别,外加一个 retryable 标志,这样代理无需解析文字就能决定下一步做什么。下面的名称就是该 error 字段的值。
服务器启动后立即退出——客户端只显示"连接已关闭"。 三个已知原因,服务器现在会自行指明前两个,而不是静默死亡。
相对路径的
ASSET_OUTPUT_DIR。 它相对于服务器的工作目录解析,而该目录由你的 MCP 客户端选择——有几个从/启动,于是assets/generated变成/assets且无法创建。请使用绝对路径。 拒绝消息会指明解析出的路径及其来源的工作目录。进程无法写入的工作区。 同样的拒绝,不同的 errno。
过期的构建。 如果
dist/早于入口点的变更,请重新构建。npm run verify会构建并随后完成一次真实的 MCP 握手,这是区分服务器坏了还是客户端配置坏了的最快方式。
normalize_mesh 或 batch_prepare_meshes 以"未找到 Blender"拒绝。
PATH 上没有本地 Blender。在 macOS 上,即使安装了 Blender,应用包也不在 PATH 上——请将 BLENDER_PATH 设置为包内的可执行文件。batch_prepare_meshes 会降级而不是失败:它仍然验证每个网格,并报告需要修复的内容。
CONFIG_MISSING——缺少凭据。
你调用的工具需要你尚未配置的提供方。消息会指明确切的环境变量。在你的 MCP 客户端的 env 块中设置它,然后重启客户端。.env 文件永远不会被读取:没有 dotenv 依赖,因此该变量必须由启动服务器的任何进程导出。
PROVIDER_HTTP 且状态码为 401/403——API 密钥无效。
密钥错误、已被吊销,或者是错误提供方的密钥。两个具体的陷阱:Leonardo 密钥需要在账户上启用 API 访问(仅网页登录并不授予此权限);而 Tripo 密钥如果没有 API 额度余额,可能在第一次付费调用时就失败,即使密钥本身是有效的。参见上面的额度警告。
RATE_LIMITED——HTTP 429。
标记为可重试。轮询会退避并自动重试(400 毫秒、800 毫秒、1600 毫秒,上限 8 秒)。下载不会重试——download_asset 单次尝试流式下载,所以请自行重新发起;由于提供方 URL 会过期,请先用 get_asset_job 重新轮询,而不是重试过期的 URL。生成请求也不会重试,这是刻意的,因为它们花钱。下载期间的 429 会以状态码为 429 的 PROVIDER_HTTP 形式出现,而不是 RATE_LIMITED。
PROVIDER_TASK_FAILED——任务在提供方侧失败。
HTTP 调用成功了,但生成没有。提供方自己的消息会保留在错误详情中。审核拒绝也会落在这里:请重写提示词,而不是原样重试。注意,Tripo 的响应可能携带 HTTP 200 但信封 code 非零;那是一次失败,本服务器会将其视为失败,而不是报告虚假的成功。
下载以 PROVIDER_HTTP 403/404 失败——URL 已过期。
这是最常见的意外。提供方的模型和预览 URL 是短命的。 它们经过签名、会过期,二十分钟前还能用的 URL 现在已经失效。解决办法不是重试同一个 URL——而是再次调用 get_asset_job 向提供方重新轮询获取新 URL,然后立即 download_asset。养成习惯:任务一报告 ready 就立即下载,而不是在漫长的会话结束时才下载。
INVALID_INPUT——不支持的图像格式。
参考图像应为标准的 Web 安全栅格格式(PNG、JPEG、WebP)。HDR、EXR、分层 PSD、SVG 和多页 TIFF 都是不可重建的输入。对于 texture_existing_asset,网格必须是 GLB、GLTF、FBX、OBJ 或 STL。请先转换;提供方不会替你转换。
PROVIDER_MALFORMED_RESPONSE——提供方返回了意外内容。
非 JSON 的响应体、空信封、无数据的成功,或上传未返回文件令牌。通常意味着提供方侧的事故或 API 版本漂移。设置 ASSET_LOG_LEVEL=debug 以查看请求形状(密钥已脱敏),并在假设 bug 在本地之前先查看提供方的状态页面。
DOWNLOAD_TOO_LARGE。
文件超过了 ASSET_MAX_DOWNLOAD_BYTES。高质量的 PBR GLB 可能很大;如果你确实想要该文件,请提高限制。
PATH_ESCAPE。
提供方提供的文件名试图解析到你的工作区之外。写入已被拒绝。这在正常操作中不应发生——如果发生了,请提交 issue。
状态
这是早期软件,最可能漂移的部分都被明确标注,而不是被默默假定。
Tripo 的 v3 端点路径被固定在一个模块中(src/providers/model3d/tripo.ts),并在其顶部以注释形式记录。Tripo 的公开文档以两种不同的方式描述 v3 接口——一个通用任务端点和按操作划分的路径——两者都出现在当前文档中。本客户端实现的是任务形式,这与可观察到的行为一致,即每次生成都会返回一个 task_id 供轮询,并暴露 TRIPO_BASE_URL 以便无需编辑代码即可重新定向。如果它们错了,你会看到一个看起来完全像 API 密钥错误的 404,所以先检查路径,再检查密钥。
从未对真实提供方 API 发起过任何调用。 这是这里最重要的注意事项,所以直说而不埋没。394 个测试中的每一个都针对 mock 或本地文件系统运行。它们覆盖了提示词构建、状态映射、路径安全、任务存储、HTTP 层的重试和重定向规则,以及针对真实文件的 glTF 检查——但一套全绿的测试套件并不能说明 Leonardo 和 Tripo 的行为是否如本客户端所假设的那样。
具体来说,以下内容仍然未经验证:
上述 Tripo v3 端点路径。
texture_model是否接受上传的网格(file_token),还是只接受先前 Tripo 任务产生的网格(original_model_task_id)。这决定了你是否能重新纹理自己已有的模型,而这正是本服务器存在的意义。解决它需要一次 HD 纹理调用的成本。音效生成未经验证。 Leonardo 记录了 Sound Effects v2 请求契约(
model、prompt、duration1-22 秒、prompt_influence、loop、quantity),但没有记录其响应形状或成品音频的获取方式。客户端从几种看似合理的形状中读取生成 id 和音频 URL,当都不匹配时,会抛出带有响应顶层键名(而非响应体,响应体可能很大或携带签名 URL)的错误,而不是报告空成功。预计第一次真实调用需要修复,请附上你看到的载荷形状提交 issue。src/providers/image/leonardo.ts中的 Leonardo 模型 id,它们是从已发布的文档转录的。请对照GET /platformModels检查;过期的 id 会以 HTTP 400 失败,读起来像格式错误的请求体。LEONARDO_MODEL_ID和每次调用的modelId都作为逃生舱存在。
如果你是第一个用真实密钥运行它的人,请准备好修复端点路径,并请提交 issue 说明你发现的内容。
已验证的内容: npm run verify 构建服务器,通过 stdio 用真实的 MCP 客户端启动它,完成握手并断言全部二十个工具都已注册。这是一次协议往返,而不是版本字符串——一个未能注册其工具的服务器仍然可以非常愉快地启动。
本地流水线的部分——inspect_asset、extract_pbr_trio、normalize_mesh、validate_game_asset——还额外针对真实发布的游戏资产而非 fixture 进行检查,因为合成 fixture 和读取它的解析器可能共享同一个错误,并且两者看起来都是绿的。这里就发生过:一个错误的 glTF 魔数常量通过了整套合成测试套件,只有真实文件才捕获了它。它们使用的无 UV 网格已提交在此处,而不是从兄弟 checkout 中读取。它过去是从游戏仓库实时读取的,当该网格被修复时,这些测试因为一个完全正确的变更而变红——一个断言固定了本项目不控制的文件的事实。测试不得依赖它不拥有的内容。
有一项测试通过符号链接的 bin(即 node_modules/.bin 实际包含的内容)来启动构建后的服务器,并与它进行 MCP 通信,因为入口点守卫正是在这里失败的:服务器在每次安装时都会立即退出,却通过了所有其他测试。它采用符号链接而非安装方式,因此无法捕获 files 或 prepare 中的打包回归;从 GitHub 进行真正的 npm install 仍然需要手动检查。
为什么测试数量不是重点
在 0.3.4 中,上一个版本的五项主要修复被逐一还原并重新运行测试套件。五项全部存活——每个变异体都完全通过。 这些修复是真实的;套件中没有任何东西在约束它们。原因是一个共同的假设:每个被桩化的 Blender 都以退出码 0 结束并恰好打印一份回执,因此子进程协议的加固在任何测试中都无法被观察到。
这值得在 README 中说明,因为这是对任何测试数量(包括本项目的测试数量)的诚实解读。测试套件验证的是作者的假设,而存在于假设内部的缺陷,对在该假设下编写的所有测试都是不可见的。改变的是纪律,而不是数量:修复现在由针对还原后的代码运行并观察到失败的测试所固定,共享的假对象被视为嫌疑对象而非基础设施。
同样的检查在一次操作中两次捕获了错误的证明。为证明焊接阈值修复而编写的两个连续夹具,在代码正确和代码损坏时报告了相同的三角形数量,而任何一个都可能作为证据发布。夹具只有在同时通过修复后和损坏的代码运行并打印出两个数字之后,才能算作证明。
贡献
欢迎提交 issue 和 pull request。如果你要添加提供者,请实现 ImageProvider 或 Model3DProvider 并且不要改动其他任何内容——如果新的提供者迫使工具表面发生变化,说明抽象有误,而这正是值得首先讨论的 bug。
许可证
MIT © 2026 Ben Haire。参见 LICENSE。
Available Tools
20 toolsanimate_assetRetarget an animation onto a rigged assetA
SPENDS 3D CREDITS. Applies a preset animation to an asset that has ALREADY been rigged with rig_asset. Each animation costs separately. ASYNCHRONOUS: poll get_asset_job, then download_asset. Refuses when the source job was not a rig, because retargeting an unrigged model produces nothing while still being billed. NOTE: the provider task name is taken from published docs and is UNVERIFIED live.
| Name | Required | Description | Default |
|---|---|---|---|
| animation | Yes | Provider preset animation name, e.g. "walk". | |
| outFormat | No | glb | |
| assetJobId | Yes | A job produced by rig_asset. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond annotations (readOnlyHint=false, idempotentHint=false), the description discloses critical behaviors: it 'SPENDS 3D CREDITS', it is asynchronous (requiring polling), it refuses for non-rig jobs, and it flags the provider task name as 'UNVERIFIED live'. These operational and trust details are not present in the annotations, giving the agent a complete picture of consequences and limitations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence in the description carries essential content: cost, purpose, asynchronous workflow, failure condition, and a trust caveat. It is front-loaded with the most urgent constraint (credit spend) and structured so that prerequisites and post-conditions are immediately clear. No filler or redundant phrasing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter tool with no output schema, the description covers all necessary usage context: the prerequisite rigging, the asynchronous flow with specific follow-up tools, the cost model, the refusal behavior for invalid inputs, and a warning about unverified provider metadata. An agent can confidently invoke it correctly without additional information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 67% (assetJobId and animation have descriptions; outFormat only has enum/default). The description adds minimal param-specific meaning: it reinforces that assetJobId must be a rig job and notes cost per animation, but these are largely operational or redundant with the schema (which already says 'A job produced by rig_asset'). The baseline of 3 applies since coverage is moderate and the description only slightly supplements the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Applies'), a resource ('a preset animation to an asset'), and a critical prerequisite ('ALREADY been rigged with rig_asset'). It clearly distinguishes this tool from other asset-creation tools by requiring a prior rig job, making its role in the pipeline unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states the precondition (must be rigged), the follow-up workflow ('poll get_asset_job, then download_asset'), and a refusal condition ('Refuses when the source job was not a rig'). This tells an agent exactly when to use it, what to do after, and when it will fail, leaving no ambiguity about its place relative to siblings like rig_asset or download_asset.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
batch_prepare_meshesNormalize and validate many meshes in one callA
FREE and fully local: no network call, no credits. Runs the preparation pipeline over a list of meshes — validate, normalize the ones that fail, validate again — and returns a per-item verdict plus a summary. Meshes that already pass are left untouched rather than rewritten. One failing item never stops the run; its error is reported and the batch continues. Normalization needs a local Blender install; without one this still validates and simply reports what would need repairing. Note that a FAILED item can still have written a file: when normalization succeeds but the result does not clear the policy, the mesh is kept for inspection and named in normalizedPath with outputKept set. Use outputsWritten, not prepared, to predict how many files are in the output directory — prepared is a verdict, not a file count.
| Name | Required | Description | Default |
|---|---|---|---|
| normalize | No | Repair meshes that fail validation. When false, only reports. | |
| outputDir | No | Where normalized copies go, resolved against the SERVER's working directory. Omit to write beside each source; an empty string is rejected rather than silently meaning "beside the source". | |
| modelPaths | Yes | Absolute paths to .glb/.gltf meshes. | |
| requireUVs | No | ||
| maxTriangles | No | ||
| minTextureSize | No | ||
| skipAlreadyValid | No | Leave meshes that already pass untouched instead of rewriting them. | |
| timeoutSecondsPerItem | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide no guidance (all false), so description bears full burden. It discloses every significant behavior: validation pipeline, normalization dependency on Blender, per-item error handling, that FAILED items may still write files, and the critical distinction between prepared and outputsWritten. Extremely thorough.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense paragraph with every sentence earning its place. Front-loads the free/local note and pipeline description, then addresses edge cases without redundancy. Length is justified given the complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 8 parameters and no output schema, the description provides surprisingly complete context: batch behavior, Blender dependency, error handling, file-writing edge case, and a caution about counting outputs. No critical information for correct invocation is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is only 50%, so description must compensate. It adds meaning to outputDir (resolved against server's working dir, empty string rejected) and clarifies skipAlreadyValid behavior. However, it does not cover requireUVs, maxTriangles, minTextureSize, or timeoutSecondsPerItem, which lack schema descriptions too. Partial compensation, but not complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Runs the preparation pipeline over a list of meshes — validate, normalize the ones that fail, validate again'. Clearly distinguishes from siblings by being a batch operation, and adds a unique free/local selling point. No ambiguity about what it does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Implies use for multiple meshes (batch) and notes free/local, but does not explicitly contrast with single-mesh alternatives like normalize_mesh or validate_game_asset. It provides clear context (list, per-item verdict) but no explicit when-not or alternative naming.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_3d_assetReconstruct a 3D assetA
SPENDS 3D CREDITS. Creates a textured 3D model. ASYNCHRONOUS — returns immediately with a job id; poll get_asset_job until status is "ready", then call download_asset. Provide exactly ONE source: assetJobId (uses that job's selected reference image), imagePath (a local png/jpg/webp), imageUrl (https), or textPrompt (skips images entirely). Model URLs from the provider EXPIRE, so download promptly once ready.
| Name | Required | Description | Default |
|---|---|---|---|
| pbr | No | Generate PBR material channels. | |
| quad | No | Request quad topology. Costs extra credits, but is far kinder to downstream editing. | |
| seed | No | ||
| spec | No | Required when NOT using assetJobId, so the result has a name and provenance. | |
| imageUrl | No | https URL of a reference image. | |
| faceLimit | No | Cap the output triangle count. | |
| imagePath | No | Absolute path to a local reference image. | |
| assetJobId | No | An existing job with a selected reference image. | |
| textPrompt | No | Generate directly from text, no reference image. | |
| modelVersion | No | Provider model version. Defaults to v3.0-20250812. | |
| textureQuality | No | "detailed" is the HD tier and costs more credits. | detailed |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false, so the description's 'Creates' is consistent. The description adds valuable behavioral context not in annotations: it 'SPENDS 3D CREDITS,' is asynchronous (returns a job id), and model URLs expire. This provides important operational traits beyond the structured annotations, though it doesn't detail failure modes or input validation failures.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a compact five-sentence paragraph, front-loading the most critical facts: credits, creation, asynchronous behavior, source options, and URL expiration. Each sentence serves a purpose with no fluff or repetition. The structure is efficient and agent-friendly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
While the description covers the main workflow and source options, it omits a key requirement: that `spec` must be provided when not using assetJobId. The schema documents this, but the description does not call it out, which could lead an agent to submit a request without the required `spec` for image/text sources. Given the tool's complexity and absence of an output schema, this is a notable gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 91%, so the baseline is 3. The description enhances understanding of the source parameters: it explains that assetJobId uses a job's selected reference image, imagePath must be local png/jpg/webp, imageUrl must be https, and textPrompt skips images. This goes beyond the schema's brief property descriptions and clarifies the one-source requirement.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb and resource: 'Creates a textured 3D model.' It identifies the tool as the creation step in a larger workflow, and the title confirms 'Reconstruct a 3D asset.' It distinguishes from siblings like get_asset_job or download_asset by describing the creation action itself, making the purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells the agent when to use this tool: 'Provide exactly ONE source' and enumerates the four options (assetJobId, imagePath, imageUrl, textPrompt). It also directs the follow-up actions: poll get_asset_job, then call download_asset. This is clear workflow guidance that distinguishes it from alternative tools and leaves nothing to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_game_propStart a game prop from a briefA
SPENDS IMAGE CREDITS ONLY. Convenience entry point: takes a loose brief, builds a reconstruction-grade prompt, and generates N candidate reference images. It deliberately STOPS THERE and does NOT spend 3D credits — look at the returned candidates, call select_reference with your choice, then create_3d_asset. This exists so art direction stays with you rather than being guessed at.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Short identifier, e.g. "portable_atmospheric_processor". | |
| category | No | ||
| numImages | No | ||
| description | Yes | What the object is, in plain language. | |
| waitSeconds | No | ||
| artDirection | No | Free-text style, materials and wear. | |
| gameplayPurpose | No | ||
| dimensionsMeters | No | Real-world size in metres. Used for scale sanity, not enforced by the generator. | |
| targetTriangleCount | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare openWorldHint=true and readOnlyHint=false, but the description adds substantial behavioral value beyond those: it discloses the credit cost profile up front ('SPENDS IMAGE CREDITS ONLY' and not 3D credits), and reveals the transformation behavior (loose brief → reconstruction-grade prompt). No contradiction with annotations. It could go further on details like generation time or failure modes, which keeps it from a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences with zero filler. The most critical operational fact (credit spending) is front-loaded in all caps, followed by the workflow and the design rationale. Every sentence earns its place; the structure mirrors the tool's purpose as an entry point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 9 parameters, a nested object, and no output schema, the description covers the workflow and handoff chain well but leaves parameter semantics to the schema, which is only 44% covered. The output shape ('candidate reference images') is hinted but not detailed. Given the strong sibling differentiation and workflow clarity, this is mostly complete with minor gaps around parameters and return details.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 44%, and the description does not compensate by explaining individual parameters — it focuses on workflow. The schema itself carries descriptions for name, description, and dimensionsMeters, but parameters like category, artDirection, gameplayPurpose, waitSeconds, and targetTriangleCount have no descriptions and are not touched in the tool description. This is a real gap given the low coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb-resource pair ('takes a loose brief, builds a reconstruction-grade prompt, and generates N candidate reference images') and explicitly frames itself as a 'convenience entry point' that deliberately stops short of 3D generation. It names the exact sibling tools it hands off to (select_reference, create_3d_asset), making the differentiation unambiguous without needing to open their schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides an explicit sequential workflow: 'look at the returned candidates, call select_reference with your choice, then create_3d_asset.' It also states when NOT to use it indirectly by declaring that it stops at reference generation and spends no 3D credits — the agent knows this is the reference-stage tool, not the modeling stage. The rationale ('so art direction stays with you') gives clear context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
download_assetDownload a finished asset into the workspaceA
FREE: no credits. Downloads a completed asset job into a local workspace folder — the model, any PBR variant, the provider preview, the source reference image — and EXTRACTS embedded textures into textures/ as separate files. Also writes asset.json with complete provenance. Call this as soon as get_asset_job reports "ready": provider URLs expire. Never overwrites an existing workspace; a repeat download gets a new suffixed folder.
| Name | Required | Description | Default |
|---|---|---|---|
| assetJobId | Yes | ||
| destination | No | Override the output root. Defaults to ASSET_OUTPUT_DIR. | |
| extractTextures | No | Write embedded glTF images out as separate texture files. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations state readOnlyHint=false, openWorldHint=true, and destructiveHint=false, but the description adds concrete behaviors: writes multiple file types, extracts textures to a textures/ subdirectory, writes asset.json, and never overwrites existing workspaces. It also explains the urgency of expiring URLs, which is not captured by annotations. No contradictions.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with a cost note ('FREE: no credits') and then a compact enumeration of what is downloaded. Every phrase adds value: the extraction detail, the asset.json provenance, the urgency trigger, and the no-overwrite guarantee. No redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a download tool with no output schema, the description conveys all essential operational facts: what is downloaded, where textures go, the asset.json side effect, the timing constraint, and the handling of repeated calls. It answers the key questions an agent would have to call it correctly. The lack of an explicit return value is acceptable given the action-oriented nature, and the description is otherwise complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema covers 67% of parameters (destination and extractTextures have descriptions; assetJobId has none). The description adds meaning beyond the schema: it explains the output root concept via 'workspace folder', specifies the texture extraction location ('textures/'), and clarifies the non-overwrite behavior tied to destination. It does not explicitly describe assetJobId but implies it from get_asset_job, which is sufficient context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('downloads'), resource ('completed asset job'), and destination ('local workspace folder'), enumerating exactly what gets downloaded (model, PBR variant, preview, source reference) and what is extracted/extended (textures, asset.json). It also implicitly differentiates from get_asset_job by referencing it as the prerequisite, and from other asset tools by focusing on fetching a finished job.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs when to call ('as soon as get_asset_job reports "ready"') and why (provider URLs expire). Also warns about repeat-download behavior (new suffixed folder instead of overwrite), which guides an agent on idempotency handling without needing to guess.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
extract_pbr_trioSplit a material into separate PBR texture planesA
FREE and fully local: no network call, no credits. Splits a glTF material into independent albedo, normal and roughness images (plus metallic and occlusion when present), de-packing the glTF metallicRoughness texture — roughness is its GREEN channel, metallic its BLUE. Resamples to an exact resolution, averaging colour in linear light and data channels directly, and writes a receipt naming the source texture and channel behind every plane. Use after download_asset, or on any local glTF/GLB. Planes a material declares only as a scalar factor are emitted as flat images and marked source="factor" so a constant is never mistaken for measured data.
| Name | Required | Description | Default |
|---|---|---|---|
| modelPath | No | Absolute path to a local .glb or .gltf. | |
| assetJobId | No | A job that has already been downloaded. | |
| resolution | No | Square output size. Defaults to the largest source texture dimension. | |
| destination | No | Output directory. Defaults to the workspace. | |
| materialIndex | No | Which material to split when the file has several. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations all false, the description carries the full burden of behavioral disclosure, and it does so thoroughly. It reveals the tool performs no network call, consumes no credits, de-packs channels with specific color-space handling (linear light), and writes a receipt with provenance. It also explains the 'source='factor'' edge case, which is exactly the kind of nuance an agent needs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is information-dense but well-organized: it leads with the key value proposition, then the core operation, then technical details, usage context, and a special case. Each sentence earns its place, and there is no redundant filler. Front-loading the local-free nature and the main split action aids quick comprehension.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 5 optional parameters and no output schema, the description covers almost everything an agent needs: input types, channel semantics, resolution behavior, receipt generation, and the factor distinction. The only notable gap is that it never explicitly states what the tool returns (e.g., a job ID or a list of output paths). Since it says 'writes a receipt,' the return value is implied but not defined, which is a minor omission.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 100% description coverage, so the baseline is 3. The tool description adds some context (e.g., resolution default behavior and the flat image behavior for scalar factors) but doesn't materially enhance parameter meaning beyond what the schema already provides. The schema descriptions suffice.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('splits'), a precise resource ('a glTF material'), and enumerates the outputs (albedo, normal, roughness, plus metallic and occlusion). It immediately distinguishes the tool from siblings by noting it is local and free, and by referencing the material's metallicRoughness de-packing, making the function unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit context for when to use the tool: 'Use after download_asset, or on any local glTF/GLB.' This tells the agent the prerequisite and the acceptable inputs. It doesn't explicitly name alternatives or when not to use it, but the context is clear enough to guide correct invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_asset_referenceGenerate reference images for a game assetA
SPENDS IMAGE CREDITS. Generates candidate reference images for a game asset, framed for 3D reconstruction rather than as concept art (isolated object, whole silhouette, neutral background, even lighting). Returns candidate image URLs for YOU to look at. It does NOT create a 3D model — after inspecting the candidates, call select_reference then create_3d_asset. Asynchronous: waits up to waitSeconds, then returns a job id to poll.
| Name | Required | Description | Default |
|---|---|---|---|
| seed | No | Fix the seed for a reproducible generation. | |
| spec | Yes | ||
| width | No | ||
| height | No | ||
| modelId | No | Override the image model. Defaults to the provider recommendation. | |
| numImages | No | How many candidates to generate. Each one costs image credits. | |
| waitSeconds | No | Seconds to wait for the images before returning. 0 returns immediately with a job id. Bounded on purpose: this call never blocks indefinitely. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds meaningful behavioral context beyond the annotations: it discloses the credit cost ('SPENDS IMAGE CREDITS'), the asynchronous execution model ('waits up to waitSeconds, then returns a job id to poll'), and the output nature ('candidate image URLs for YOU to look at'). It does not contradict the readOnlyHint=false or idempotentHint=false annotations, and it provides insight into side effects that annotations alone do not convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is moderately long but each sentence adds value: credit cost, generation framing, output, not-3D warning, workflow, and async behavior. It front-loads the credit warning and core action. A minor redundancy exists in explaining the framing and the not-3D aspect, but overall it is efficient and well-structured.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (7 parameters, nested objects, no output schema), the description covers the high-level workflow and async behavior but omits parameter-level guidance. It does not explain what fields in 'spec' are essential or how waitSeconds interacts with job polling via get_asset_job. The mention of 'call select_reference then create_3d_asset' hints at the pipeline but leaves the agent to infer details from the schema. It is adequate for a basic invocation but incomplete for full correct usage of all options.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 57%, leaving many parameters undocumented. The description does not compensate: it mentions 'waitSeconds' implicitly but does not explain the role of spec, numImages, or other nested parameters beyond what the schema already says. For a tool with complex nested objects (spec.artDirection, spec.geometry), the description offers almost no help in constructing valid parameters, falling short of the burden placed on it by low schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb ('generates'), the resource ('candidate reference images for a game asset'), and the specific framing ('for 3D reconstruction rather than concept art') with concrete visual details (isolated object, neutral background). It also explicitly distinguishes from the sibling create_3d_asset by stating it does NOT create a 3D model, making the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides a clear workflow: 'after inspecting the candidates, call select_reference then create_3d_asset'. It also notes asynchronous behavior and the need to poll for a job id. However, it does not mention when NOT to use this tool (e.g., for generating variations) or how it contrasts with generate_reference_variations, so it lacks explicit exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_reference_variationsExplore variations of an existing referenceA
SPENDS IMAGE CREDITS. Generates variations of an existing asset job along ONE named axis (silhouette, material_treatment, industrial_detailing, wear, proportions, functional_components) while holding the object identity fixed — a variation should still be the same object, not a different one. Creates a NEW child job linked to the parent.
| Name | Required | Description | Default |
|---|---|---|---|
| axis | Yes | Which design dimension to explore. | |
| seed | No | Fix the seed for a reproducible generation. | |
| width | No | ||
| height | No | ||
| modelId | No | Override the image model. Defaults to the provider recommendation. | |
| numImages | No | How many candidates to generate. Each one costs image credits. | |
| assetJobId | Yes | The parent job whose spec should be varied. | |
| waitSeconds | No | Seconds to wait for the images before returning. 0 returns immediately with a job id. Bounded on purpose: this call never blocks indefinitely. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses a critical side effect upfront: 'SPENDS IMAGE CREDITS.' It also explains that it creates a new child job and that the object identity is held fixed, which goes beyond the annotations (readOnlyHint=false, openWorldHint=true). While it doesn't mention every possible side effect, this is substantial behavioral context not present in the schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, well-structured sentence that front-loads the cost warning. Every clause adds value: the credit warning, the axis constraint, the identity requirement, and the child-job relationship. There is zero fluff or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 8 parameters and no output schema, the description covers the core function and key side effects (credits, child job creation). It doesn't explain the return format, but it mentions creating a child job, which hints at a job reference. The waitSeconds behavior is defined in the schema, so the description doesn't need to repeat it. The remaining gaps (output details) are minor given the tool's role.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema already covers 75% of parameters with descriptions (axis, seed, modelId, numImages, assetJobId, waitSeconds). The description adds nuance by stating that only ONE axis is varied and that the object identity is fixed, which clarifies the axis and assetJobId parameters. However, this is supplementary rather than essential, and width/height lack descriptions both in schema and description without compensation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Generates variations') and a specific resource ('existing asset job'), and clearly scopes the action to 'ONE named axis' with a concrete list. It distinguishes itself from siblings by emphasizing it creates a new child job linked to the parent rather than starting from scratch. This leaves no ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context for use: you have an existing asset job and want variations along a single axis. It implies alternatives by mentioning 'existing asset job' (vs. creating from scratch) but does not explicitly name sibling tools or state when not to use it. The instruction to hold object identity fixed further constrains when it is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_sound_effectGenerate a game sound effectA
SPENDS AUDIO CREDITS. Generates a short sound effect from a text description — weapon reports, impacts, footsteps, UI blips, or a seamless ambience loop. Set loop:true for anything that must tile without a seam. Each variation in quantity costs separately. Polls and downloads inline, returning local file paths; the wait is bounded, so a slow provider returns a job id to poll with get_asset_job rather than hanging. NOTE: the provider documents this request contract but not its response shape, so this path is UNVERIFIED against the live API — the first real call may need a client fix.
| Name | Required | Description | Default |
|---|---|---|---|
| loop | No | Request a seamless loop. Essential for ambience beds and engine tones. | |
| name | Yes | Short identifier, e.g. "plasma_rifle_fire". Becomes the workspace folder. | |
| prompt | Yes | What the sound is. Concrete physical description beats genre words. | |
| quantity | No | How many variations. Each costs credits. | |
| destination | No | Output root. Defaults to ASSET_OUTPUT_DIR. | |
| waitSeconds | No | Bounded wait before returning a job id instead. 0 returns immediately. | |
| durationSeconds | No | Whole seconds, 1-22. Provider default is 2. | |
| promptInfluence | No | 0..1. Higher follows the prompt more literally; lower explores. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only provide readOnlyHint=false, openWorldHint=true, idempotentHint=false, destructiveHint=false, which say little about side effects or costs. The description carries the full burden and does so richly: it states 'SPENDS AUDIO CREDITS', explains each variation costs separately, describes polling behavior with a bounded wait, reveals the return format (local file paths), and even discloses that the path is UNVERIFIED against the live API. This goes well beyond the annotations and is a model of transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is longer than the ideal but every sentence serves a purpose. It front-loads the cost warning, then describes the tool, provides loop guidance, explains polling, and ends with an essential unverified caveat. It is not verbose or redundant, though it could be tightened slightly by omitting the repeated warning about variations in both the main text and the parameter schema.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a complex 8-parameter tool with no output schema, the description covers cost, loop behavior, variations, polling, bounded wait, and return format (local file paths). It also flags the unverified status. It does not specify error handling or edge cases, but given the schema covers parameter details and the description covers behavioral essentials, it is sufficiently complete for an agent to call correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description largely repeats what the schema already states (e.g., loop for seamless tiling, prompt advice 'Concrete physical description beats genre words' is in the schema's prompt description). It adds no new parameter semantics beyond the schema, so a 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a clear verb+resource: 'Generates a short sound effect from a text description' and lists concrete examples (weapon reports, impacts, footsteps, UI blips, ambience loop). It is immediately distinct from sibling tools like create_3d_asset or get_asset_job, since it targets audio generation and even references get_asset_job for polling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit usage context: 'SPENDS AUDIO CREDITS' warns about cost, 'Set loop:true for anything that must tile without a seam' provides a condition for a parameter, and it explains when polling is needed ('a slow provider returns a job id to poll with get_asset_job rather than hanging'). It does not explicitly name alternatives or say when NOT to use this tool, but the context is clear enough for an agent to choose appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_asset_jobGet asset job statusARead-only
Check an asset job, refreshing it from the provider if it is still running. READ-ONLY: makes a network call to the provider but never spends credits. Call this after create_3d_asset or texture_existing_asset until status is "ready", then call download_asset. Statuses: queued, generating_reference, reference_ready, generating_3d, processing, ready, failed, cancelled.
| Name | Required | Description | Default |
|---|---|---|---|
| detail | No | Return the FULL job record including prompts, provider parameters and every file. Defaults to false because full records are large and flood context on repeated polls. | |
| assetJobId | Yes | The local asset job id returned when the job was created. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and openWorldHint, but the description adds that it 'makes a network call to the provider but never spends credits' and explains the refresh behavior. This adds concrete context beyond annotations. It doesn't describe return format or error handling, but given the annotation coverage, this is sufficient.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loads the core purpose and read-only nature. The status list is dense but comprehensive, and the sequential guidance is clear. It could be split into a list for readability, but it's efficient and every sentence carries useful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple polling tool with two parameters and no output schema, the description covers the essential workflow: when to call, what statuses to expect, and the read-only safety. It doesn't detail error handling or response structure, but that's not critical given the tool's simplicity and the guidance provided.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both parameters are documented in the schema. The description adds extra value by explaining the 'detail' parameter's default and its rationale ('Defaults to false because full records are large and flood context on repeated polls'), which is not in the schema. This goes beyond the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action: 'Check an asset job, refreshing it from the provider if it is still running.' It identifies the resource (asset job) and the specific behavior (refresh if running), and it distinguishes itself from siblings by tying it to the create/texture workflow and the subsequent download step. This is specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit sequential guidance: 'Call this after create_3d_asset or texture_existing_asset until status is "ready", then call download_asset.' This tells the agent exactly when to use it. However, it doesn't explicitly contrast with alternatives like list_asset_jobs (which is for listing, not polling a single job), so it's not a full when-not-to-use, but it is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_spend_reportReport what this session has spentARead-onlyIdempotent
FREE and fully local: no network call, no credits. Reports the estimated provider spend for this workspace, broken down by tool, plus the remaining headroom under ASSET_SPEND_LIMIT_CENTS if one is set. Figures are normalised to US cents because providers bill in different units. Costs marked "estimated" are pessimistic placeholders for providers that do not publish a per-call rate — treat them as a guard, not an invoice.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds valuable behavioral context: it is free, fully local, makes no network call, consumes no credits, normalizes figures to US cents, and clearly flags that estimated costs are pessimistic placeholders. This goes beyond the annotations to explain the nature of the data and its reliability, though it does not address any potential concurrency or rate-limit behavior (likely irrelevant for a local read).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no fluff. The leading 'FREE and fully local: no network call, no credits' is an efficient hook, followed by the core reporting function and the important estimation caveat. Every part adds value, and it is front-loaded with the most decision-relevant information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters and no output schema, the description fully covers what the agent needs: what is reported (spend breakdown by tool, remaining headroom), the unit normalization, and the caveat about estimated costs. There is no missing detail that would prevent correct invocation or interpretation of results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, and the schema coverage is 100% (empty properties object). Per the baseline rule for 0 parameters, a score of 4 is appropriate. The description does not need to explain parameters since none exist, and it appropriately focuses on the output semantics instead.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Reports') and a specific resource ('estimated provider spend for this workspace, broken down by tool'), plus the additional output of remaining headroom. It clearly distinguishes from sibling tools, which are all asset-generation/job tools, by being the only spend-related tool. The purpose is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description does not explicitly state when to use this tool versus alternatives, though no direct alternative exists among siblings. It does convey that it is free and local, implying it can be called without cost concerns, but it lacks an explicit 'use this when you need to check budget' or 'prefer this over external APIs' guidance. The usage context is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inspect_assetInspect a downloaded 3D assetARead-onlyIdempotent
FREE and fully local: no network call, no credits. Reports the technical properties of a downloaded glTF/GLB — mesh and triangle counts, materials, texture resolutions, bounding box in metres, and whether UVs, normals, tangents and PBR channels are present — plus warnings for anything that will cause downstream problems. Pass assetJobId to inspect a downloaded job, or modelPath to inspect any local file.
| Name | Required | Description | Default |
|---|---|---|---|
| modelPath | No | Absolute path to a local mesh. GLB and glTF are inspected directly; other mesh formats are accepted and will fail at decode, since only glTF can be read. | |
| assetJobId | No | A job that has already been downloaded. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the tool is known to be safe. The description adds valuable context: 'FREE and fully local: no network call, no credits' and lists what it reports, including warnings for downstream problems. This goes beyond the annotations without contradicting them.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences and front-loaded with the key benefit ('FREE and fully local'), then the purpose, then how to call it. The list of properties is somewhat lengthy but necessary to convey the output. It is efficient without being terse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, but the description enumerates what is reported (counts, materials, etc.) and mentions warnings, covering the return content. It also explains both parameters' usage. It does not detail error behavior beyond the schema's note on non-glTF formats, but that is sufficient for a read-only inspection tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents both parameters. The description adds meaning by clarifying the relationship: assetJobId is for a downloaded job and modelPath for any local file. This clarifies the distinction beyond the schema's bare descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('inspect') and resource ('downloaded glTF/GLB' or local file), and enumerates the technical properties it reports (mesh/triangle counts, materials, texture resolutions, bounding box, presence of UVs/normals/tangents/PBR channels). It also notes warnings for downstream issues, making the purpose concrete and distinct from siblings like get_asset_job or validate_game_asset.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear usage context for both parameters: 'Pass assetJobId to inspect a downloaded job, or modelPath to inspect any local file.' This tells the agent when each input is appropriate. However, it does not explicitly mention when not to use this tool versus alternatives, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_asset_jobsList asset jobsARead-only
List local asset jobs, newest first. READ-ONLY and fully local: no network call, no credits. Does not refresh provider state — use get_asset_job for that.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| status | No | Filter to one lifecycle status. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Even though readOnlyHint is true, the description adds critical context: 'fully local: no network call, no credits' and 'does not refresh provider state.' These details about cost, network access, and side effects go well beyond the annotation and help an agent gauge operational impact.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences: the first states the core purpose and ordering, the second adds local/no-network/no-credit detail, and the third clarifies the exception. Information is front-loaded and every sentence earns its place with no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only list tool with optional parameters, the description covers purpose, sorting, side-effect caveats, and the alternative tool. It does not describe the return structure or pagination, but the schema provides limit bounds and the tool's simplicity reduces the need. Overall, it is nearly complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description does not mention either parameter (limit or status). Schema coverage is only 50% (status has a description, limit does not), and the description does not compensate by explaining limit's role or the enum's purpose. An agent must rely on the parameter names and defaults, which is insufficient for a low-coverage schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('list') and resource ('local asset jobs'), adds a sorting guarantee ('newest first'), and explicitly distinguishes itself from get_asset_job by noting it does not refresh provider state. This makes the tool's scope unambiguous against a large sibling set.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides an explicit exclusion: 'Does not refresh provider state' and directly names the alternative 'use get_asset_job for that.' This tells the agent exactly when to choose a different tool, leaving no ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
normalize_meshRepair a mesh so it can be textured and shippedA
FREE and fully local: no network call, no credits. Requires a local Blender install (optional dependency; the tool refuses with instructions if absent). Repairs a mesh for downstream use: generates UV coordinates for objects that have NONE — the single most common reason a mesh cannot be textured — welds coincident vertices, dissolves degenerate triangles, gives every material a stable non-empty name, forces opaque blending, and optionally decimates to a triangle budget. Existing UV layouts are never overwritten. Exports GLB and returns a receipt with before/after counts so the change is measurable.
| Name | Required | Description | Default |
|---|---|---|---|
| modelPath | No | Absolute path to a local mesh (.glb/.gltf/.obj/.fbx/.stl). | |
| overwrite | No | Allow an explicit outputPath to replace an existing file. Off by default: a silent overwrite destroys a result you may already have reviewed. Never permits writing over the input mesh. | |
| assetJobId | No | A downloaded job whose model should be normalized. | |
| outputPath | No | Where to write the GLB. Must end in .glb, or have no extension (in which case .glb is appended) — the exporter rewrites the extension, so a .gltf path would silently become .glb and could land on a different file. Refused if it resolves onto the input mesh, by filesystem identity, so symlinks, hardlinks and case-insensitive volumes all count. Use an ABSOLUTE path: a relative one resolves against the SERVER's working directory, which your MCP client chose, and a leading ~ is not expanded. Naming an existing directory writes a sibling file beside it, not inside it. Defaults to <input>_normalized.glb beside the source. | |
| islandMargin | No | UV island padding. | |
| cleanGeometry | No | Weld coincident vertices, dissolve degenerate faces, make normals consistent. | |
| mergeDistance | No | Weld threshold in scene units. Larger values will change the silhouette. | |
| timeoutSeconds | No | ||
| targetTriangles | No | Decimate down to roughly this many triangles. Omit to leave density alone. | |
| unwrapMissingUVs | No | Generate UVs for objects that have none. Never touches an existing layout. | |
| angleLimitDegrees | No | Smart-project angle limit. | |
| normalizeMaterials | No | Name every material slot and force opaque blending. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations carry no safety hints (all false/empty), so the description bears the full burden — and it exceeds it. It discloses the surprising 'forces opaque blending', guarantees 'Existing UV layouts are never overwritten', and repeatedly states it never writes over the input mesh. It also reveals the receipt with before/after counts. No contradiction with annotations (destructiveHint=false is consistent with the no-overwrite guarantee).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A dense paragraph with no filler — every sentence contributes (dependency, behavior list, safety guarantees, return format). It is front-loaded with the cost model. Slightly long, but the information density justifies the length.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 12-parameter, zero-required mutation tool with no output schema, the description covers the key decision points: dependency requirements, safety boundaries, and the measurable return receipt. It doesn't walk through every parameter, but the schema handles that; the main omission is explicit routing away from overlapping siblings.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 92%, so the schema documents nearly all parameters; the baseline of 3 applies and the description need not compensate. It does add a little value (decimation goal, UV generation intent) but leaves parameter-level details to the schema, which is appropriate at this coverage level.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific, unambiguous purpose: 'Repairs a mesh for downstream use' and enumerates the exact operations (UV generation, vertex welding, degenerate-triangle dissolution, material naming, opaque blending, optional decimation). Verb+resource are distinct and clearly differentiated from siblings such as retopologize_asset and texture_existing_asset.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides strong context: it calls out that it is free/local with no credits, and flags the Blender optional dependency with refusal behavior. It explains the canonical scenario ('the single most common reason a mesh cannot be textured'). It doesn't name sibling alternatives explicitly with when-not conditions, so differentiation is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
preview_asset_promptPreview the prompt that would be generatedARead-onlyIdempotent
FREE and fully local: no network call, no credits. Shows the exact reconstruction-oriented prompt and negative prompt that generate_asset_reference would send for a given spec. Use this to sanity-check art direction before spending image credits.
| Name | Required | Description | Default |
|---|---|---|---|
| spec | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly, idempotent, non-destructive behavior. The description adds valuable context: it is free, fully local (no network call, no credits), and shows the exact prompt that the generator would send. This goes beyond the annotations by clarifying cost and network implications.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences: first states the key benefit (free/local), second the core action, third the usage scenario. No filler, front-loaded with the most important differentiator.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers purpose, benefit, use case, and output type (prompt and negative prompt). It does not detail the spec schema, but that is fully documented in the input schema. For a non-destructive preview tool with robust annotations, this is sufficient; the only minor omission is any note about error handling or output format details, but those are not critical.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description only refers to 'a given spec' without elaborating on its structure. However, the input schema's nested properties contain rich descriptions for each field (name, output, etc.), so the agent can understand the spec from the schema. The description adds no new meaning to the spec parameter itself, so it relies on the schema – baseline 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states the action ('Shows the exact...prompt') and the resource (the prompt that generate_asset_reference would send), and distinguishes itself as FREE and fully local, differentiating it from the generating sibling. It names the sibling tool and clearly communicates it's a preview, not the generator.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says 'Use this to sanity-check art direction before spending image credits,' giving a clear when-to-use condition. It names generate_asset_reference as the alternative that actually spends credits, and implies this tool is for pre-flight validation. No exclusions are needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
retopologize_assetRebuild an asset's topology, optionally as quadsA
SPENDS 3D CREDITS. Rebuilds the topology of an existing generated asset. Quad output is the default because quads survive downstream mesh qualification and editing far better than the triangle soup generators typically emit. ASYNCHRONOUS: poll get_asset_job, then download_asset and validate_game_asset. NOTE: the provider task name is taken from published docs and is UNVERIFIED live.
| Name | Required | Description | Default |
|---|---|---|---|
| quad | No | Quads rather than triangles. | |
| faceLimit | No | Target face count. | |
| assetJobId | Yes | A job whose 3D task produced a model. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds significant behavioral context beyond annotations: it discloses credit spending, async execution with poll steps, and flags the provider task name as unverified. This is valuable transparency that annotations do not provide, and there is no contradiction with the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a few sentences, each contributing useful information: credit cost, purpose, rationale, async steps, and a verification note. It is front-loaded with the most critical constraint (credit spend) and avoids redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a mutation tool with no output schema, the description covers the essential context: the operation, cost, async flow, and follow-up steps. It could mention potential error conditions or prerequisites more explicitly, but the assetJobId parameter description in the schema helps fill that gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all parameters are documented in the schema. The description adds minimal extra meaning—only reiterating the quad default, which is already in the schema. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Rebuilds' and the resource 'topology of an existing generated asset', distinguishing it from siblings like normalize_mesh or texture_existing_asset. It also explains the rationale for quad output, reinforcing its specific role.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides context on why quads are preferred but does not explicitly state when to use this tool versus alternatives like normalize_mesh. The async workflow is mentioned, but no exclusion criteria or comparisons are provided, leaving usage decisions partially implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
rig_assetGenerate a skeleton and skin weightsA
SPENDS 3D CREDITS. Rigs an existing generated asset — builds a skeleton and skin weights so it can be animated. Takes an asset job that already produced a model. ASYNCHRONOUS: poll get_asset_job, then download_asset. Rig before animating; retargeting an unrigged model wastes the credits. NOTE: the provider task name is taken from published docs and is UNVERIFIED live.
| Name | Required | Description | Default |
|---|---|---|---|
| spec | No | Which skeleton convention to target. | humanoid |
| outFormat | No | glb | |
| assetJobId | Yes | A job whose 3D task produced a model. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses several behavioral traits beyond the annotations: it spends 3D credits (cost), it is asynchronous requiring polling of get_asset_job and download_asset, and it notes that the provider task name is unverified. These are critical operational details that annotations (readOnlyHint=false, openWorldHint=true) do not capture. The description adds substantial transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Every sentence earns its place: the credit warning is front-loaded, the async workflow is stated, and the prerequisite and warning about wasted credits are included. It is information-dense but not bloated, with a clear logical flow from cost to action to next steps.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (asynchronous, credit-spending, dependency on prior job), the description covers all essential aspects: what it does, the prerequisite, the async polling pattern, and the cost implication. It even flags the unverified provider name. For a tool with no output schema, this is nearly complete for an agent to use correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 67%, leaving outFormat undocumented. The description does not clarify what outFormat options are or how spec affects the rigging, beyond what the schema already states for assetJobId. While the description reinforces that assetJobId must reference a completed model, it adds minimal value to parameter understanding. The missing outFormat explanation is a clear gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (rigs), the resource (an existing generated asset), and the outcome (builds skeleton and skin weights). It distinguishes from siblings like animate_asset and retopologize_asset by framing the purpose as enabling animation. The verb-resource combination is specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit context: it must be used on an asset job that already produced a model, and it should precede animation ('Rig before animating'). It also warns about wasting credits by retargeting an unrigged model, which implies when this tool is the right choice. It does not explicitly name alternatives like animate_asset, but the sequencing guidance provides adequate usage direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
select_referenceChoose which reference image to reconstructAIdempotent
FREE and local: no network call, no credits. Records which candidate image should be used for 3D reconstruction. Call this after looking at the candidates from generate_asset_reference, and before create_3d_asset.
| Name | Required | Description | Default |
|---|---|---|---|
| assetJobId | Yes | ||
| candidateId | Yes | The candidate id, e.g. "cand_1". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide idempotentHint=true and destructiveHint=false, but the description adds meaningful context: it is free and local (no network call, no credits) and that it 'records' which candidate image to use. This goes beyond the structured annotations and helps the agent understand side effects (state change, but idempotent) and cost implications.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences with no fluff. The free/local note is front-loaded, followed by the core action and workflow. Every sentence earns its place, and the structure is immediately scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter selection tool with no output schema, the description is largely complete: it explains the core action, the workflow sequence, and key behavior (free/local). The only gap is the undocumented assetJobId, but given the tool's simplicity and the workflow clarity, a 4 is reasonable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 50%: candidateId has a description, assetJobId does not. The description mentions 'candidate image' which indirectly relates to candidateId, but it does not clarify assetJobId at all. The description adds marginal value beyond the schema but fails to compensate for the undocumented parameter, so a 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('records which candidate image') on a specific resource ('for 3D reconstruction'), and explicitly places it between generate_asset_reference and create_3d_asset. This clearly differentiates it from siblings like generate_reference_variations or create_3d_asset.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit workflow context: 'Call this after looking at the candidates from generate_asset_reference, and before create_3d_asset.' This is clear when-to-use guidance. It does not mention when not to use or list alternative tools, but the workflow sequencing is strong enough for a 4.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
texture_existing_assetGenerate PBR textures for a mesh you already haveA
SPENDS 3D CREDITS. Applies newly generated PBR materials to an EXISTING mesh, keeping its geometry untouched. Use this when you already own a model and only the materials are missing or wrong — it is cheaper than regenerating and preserves the mesh exactly. Provide the mesh as either modelPath (local .glb/.gltf/.fbx/.obj/.stl) or originalAssetJobId (a previous job from this server whose 3D task produced a model). Direct the material with EITHER prompt OR styleImagePath, not both. ASYNCHRONOUS: poll get_asset_job until "ready", then download_asset. NOTE: providers may only support retexturing meshes that originated from their own prior task; if a provider rejects an uploaded mesh, use originalAssetJobId instead.
| Name | Required | Description | Default |
|---|---|---|---|
| pbr | No | ||
| spec | No | Required with modelPath, so the result has a name and provenance. | |
| prompt | No | Text direction for the material. | |
| modelPath | No | Absolute path to a local mesh file. | |
| textureSeed | No | ||
| modelVersion | No | ||
| styleImagePath | No | Local image whose look should be transferred onto the mesh. | |
| textureQuality | No | "detailed" is the HD tier and costs more credits. | detailed |
| textureAlignment | No | "geometry" aligns to the mesh shape; "original_image" to the reference image. | |
| originalAssetJobId | No | A previous asset job from this server whose 3D task produced a model. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description is richly transparent. It discloses cost ('SPENDS 3D CREDITS'), non-destructive behavior ('keeping its geometry untouched'), asynchronous operation with explicit polling instructions ('poll get_asset_job until "ready", then download_asset'), and a critical provider limitation with a fallback. These details go well beyond the annotations (readOnlyHint=false, destructiveHint=false, etc.) and give the agent a clear behavioral model.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is substantial but every sentence serves a purpose: cost warning, function, use-case justification, input methods, material direction rule, async flow, and provider caveat. It is front-loaded with the cost and core purpose, and while it is longer than average, the information density justifies the length. The structure is logical and scannable.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 10 parameters and nested objects but no output schema, the description covers the essential operational flow: how to provide the mesh, how to direct the material, how to handle the async result, and a failure case. It does not detail output structure, but that is handled by the referenced job flow. The description is complete enough for an agent to invoke correctly without reading the entire schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description clarifies the most important parameter interactions: the mutual exclusivity of prompt and styleImagePath ('EITHER prompt OR styleImagePath, not both') and the two valid inputs for the mesh (modelPath or originalAssetJobId). With 70% schema coverage, this adds critical value beyond the schema, though it does not explain every parameter (e.g., textureSeed, modelVersion), which is acceptable given their optional nature.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: applying newly generated PBR materials to an existing mesh while preserving geometry. It specifies the resource (existing mesh) and the action (apply materials), and distinguishes itself from sibling tools like create_3d_asset by explicitly framing the use case as 'when you already own a model and only the materials are missing or wrong.' This makes the purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit instructions on when to use the tool (existing mesh, missing/wrong materials) and why it's preferable (cheaper, preserves geometry). It also explains two ways to provide the mesh and a fallback for provider limitations. However, it does not explicitly name alternative tools (e.g., create_3d_asset for new meshes) or state when NOT to use it beyond the implied existing-asset condition, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_game_assetCheck whether an asset is game-readyARead-onlyIdempotent
FREE and fully local: no network call, no credits. Judges a glTF/GLB against a shipping policy and returns a pass/fail verdict with per-check reasons — UVs, normals, tangents where a normal map is bound, triangle budget, material count, texture resolution, power-of-two textures, and bounding-box sanity. Errors fail the asset; warnings are judgement calls and do not. Every threshold is overridable, because an asset failing someone else's house style is not a defect. Pair with normalize_mesh: run this first to see what is wrong, normalize, then run it again to prove the repair.
| Name | Required | Description | Default |
|---|---|---|---|
| modelPath | No | Absolute path to a local .glb or .gltf. | |
| assetJobId | No | A job that has already been downloaded. | |
| requireUVs | No | ||
| maxMaterials | No | ||
| maxTriangles | No | ||
| minTextureSize | No | ||
| requireNormals | No | ||
| maxDimensionMeters | No | ||
| minDimensionMeters | No | ||
| requireBaseColorTexture | No | ||
| requirePowerOfTwoTextures | No | ||
| requireTangentsWithNormalMap | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, so the description does not need to re-state safety. It adds valuable behavioral detail: errors fail the asset, warnings do not; every threshold is overridable (implying parameter customization). The note that it is free and fully local adds context about execution environment. This goes beyond what annotations provide, though it could be more explicit about output structure or error handling.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single dense paragraph but is well-ordered: starts with 'FREE and fully local', then describes the core function, then error/warning behavior, then overridability, then the pairing workflow. Every sentence carries information and nothing is redundant. It could be broken into bullet points for scannability, but it's efficient and not bloated. Slight deduction for length; it could be shortened without losing content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description explains the output (pass/fail with per-check reasons) and the checks, but it omits critical usage details: it does not state that one of modelPath or assetJobId must be provided (both are optional in schema), nor does it mention default thresholds or units (e.g., triangle count, texture size). Without an output schema, the return format is only vaguely described. The pairing with normalize_mesh is helpful, but the description lacks completeness for an agent to call correctly without additional inference.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is only 17% (only modelPath and assetJobId have descriptions). The description lists the checks performed (UVs, normals, tangents, triangle budget, etc.) but does not explicitly map each check to its corresponding parameter (e.g., requireUVs, maxTriangles). The statement 'Every threshold is overridable' implies parameters exist but doesn't clarify their semantics. Given the low schema coverage, the description should compensate more by naming parameters or specifying units. It adds some value by listing the checks, but an agent might still be unsure how to set specific thresholds.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool judges glTF/GLB assets against a shipping policy and returns a pass/fail verdict with per-check reasons. It lists specific checks (UVs, normals, tangents, triangle budget, etc.) and distinguishes itself from normalize_mesh by describing the pairing workflow. This is a specific, actionable purpose that an agent can easily understand without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly notes it is free and fully local (no network/credits), which is a condition for when to use it. It also instructs to pair with normalize_mesh: run this first, normalize, then run again to verify repair. This provides clear 'when to use' context. It does not explicitly mention when not to use or list alternatives, but given the tool's role as the validation step, the guidance is sufficient. A small deduction for not stating that it's a pre-shipping check among other potential validation paths.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
20 tool updates
v0.3.8- First observed
animate_asset - First observed
batch_prepare_meshes - First observed
create_3d_asset - First observed
create_game_prop - First observed
download_asset - First observed
extract_pbr_trio - First observed
generate_asset_reference - First observed
generate_reference_variations - First observed
generate_sound_effect - First observed
get_asset_job - First observed
get_spend_report - First observed
inspect_asset - First observed
list_asset_jobs - First observed
normalize_mesh - First observed
preview_asset_prompt - First observed
retopologize_asset - First observed
rig_asset - First observed
select_reference - First observed
texture_existing_asset - First observed
validate_game_asset
TDQS
Scored across 20 tools
Each tool has a clearly distinct purpose: generation (reference, variation, full 3D), selection, downloading, inspection, validation, normalization, PBR extraction, sound effects, rigging, animation, retopology, batch operations, and spend reporting. Even similar tools like generate_asset_reference and create_game_prop are differentiated by their roles (raw generation vs. convenience wrapper that stops at candidate selection).
All tool names follow a consistent verb_noun snake_case pattern (e.g., get_asset_job, create_3d_asset, download_asset, validate_game_asset). Minor variation between 'create_' and 'generate_' is acceptable since they reflect different actions (creating a final asset vs. generating intermediate references). The naming is highly predictable.
With 20 tools, the surface is broad but well-scoped for a comprehensive game asset pipeline covering generation, modification, validation, and auxiliary operations. It is on the higher end of typical, but each tool earns its place; no redundant or trivial tools exist.
The toolset covers the full asset lifecycle: generate references, select, create 3D, download, inspect, validate, normalize, extract PBR, rig, animate, retopologize, and batch prepare. Minor gaps include no explicit job deletion or advanced manual editing (e.g., UV sculpting), but these are not core to the stated purpose and can be worked around.
Maintenance
Related MCP Connectors
Turn prompts into production-ready game assets: animated characters, textures, terrain, VFX, HUD.
Generate 3D models from images or text with AI, then retexture or convert them to STL, 3MF or OBJ.
Generate game-ready 3D models, textures, and audio from natural language, over MCP.
On-brand creative studio for AI agents: images, video, audio, and 3D.
Related MCP Servers
AlicenseAqualityAmaintenanceEnables AI agents to create, manage, and download 3D models, textures, images, rigged characters, and animations through natural conversation.2820,478 npm86MIT
Context3D MCP Serverofficial
AlicenseBqualityDmaintenanceEnables AI-powered 3D model generation from text and images with PBR textures, supporting blockchain authentication and MCP integration.475 npmMIT
Thrixel MCP Serverofficial
AlicenseAqualityBmaintenanceEnables AI agents to create, edit, detail, and download game-ready 3D models through natural conversation, with visual feedback on each result.121,072 PyPIMIT- AlicenseNot gradedqualityFmaintenanceEnables AI agents to generate structured, part-aware 3D assets with named parts and real joints, allowing separate editing and integration into game engines, simulations, and AR scenes.5MIT