MCP server: prompt -> Meshy.ai 3D -> Blender turntable -> YouTube video
Server has 6 tools with complete input schemas and descriptions. Naming follows verb_noun convention (generate_, get_, render_, frames_, upload_, meshy_). Descriptions are detailed (100-300 chars) and explain WHAT, WHEN, and side effects. However, output schemas are not formally documented in the code, only inferred from docstrings. Parameters have types and descriptions, but some lack constraints (e.g., timeout, frames, resolution lack explicit min/max in schema). Error handling is minimal, no recovery guidance or categorization. Security is reasonable (API keys via env vars), but no permission gates or audit logging visible. Tool composition is sound: each does one thing, and outputs chain to inputs (e.g., generate_3d_model → glb_path → render_turntable). The meshy_to_youtube tool is a high-level orchestrator that combines five lower-level tools, good for user convenience but risks masking partial failures.
Combine numbered PNG frames into an H.264 mp4 (YouTube-ready as-is).
Generate a 3D model from a text prompt via Meshy.ai (preview → refine). The refine stage textures the model: enable_pbr (default True) for PBR textures, texture_prompt for extra guidance. Blocks until ready; returns the local .glb path and Meshy task ids.
Inspect a Meshy task; optionally download the .glb on success.
One-shot: prompt -> Meshy 3D -> turntable -> video -> YouTube upload. Always returns a dict. ``ok=True`` with ``watch_url`` on success; on a known stage failure ``ok=False`` with ``error``/``failed_stage`` and whatever artifacts were already produced.
Render a GLB as a 360° turntable to PNG frames (requires Blender). Defaults to 1080² — YouTube has no 720² constraint like BoTTube does.
Output schemas not formally documented. Tool descriptions mention return types (dict with 'ok', 'watch_url', 'error', 'failed_stage', 'glb_path', 'video_path') but no JSON Schema is visible in code. LLMs cannot reliably extract fields without explicit schema.
Numeric parameter constraints (timeout, frames, resolution, fps, duration) lack explicit min/max in schema. Descriptions mention ranges (e.g., 'range: 1-360') but JSON Schema minValue/maxValue are not visible. LLMs may pass invalid values.
Error handling lacks recovery guidance. Preflight checks raise RuntimeError with messages like 'missing: MESHY_API_KEY env var' but no actionable next steps. No categorization of retryable vs. fatal errors.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 60 | 2026-07-28+ | v2 |
Upload a finished video to YouTube (OAuth). tags is comma-separated. privacy: public | unlisted | private (default unlisted). made_for_kids: COPPA audience flag — set True only for child-directed content. Note: uploads whatever local path you point it at, under your own YouTube account — intentional, so you can publish videos made elsewhere.
meshy_to_youtube is a high-level orchestrator combining five tools. If an intermediate stage fails (e.g., turntable rendering), the response includes 'failed_stage' but no compensation tools to undo completed steps (e.g., delete generated .glb if video upload fails).
No dry-run or confirmation step for irreversible operations (upload_to_youtube, meshy_to_youtube). Agents can accidentally publish videos without a safety gate.