Repository

meshy-youtube-mcp

MCP server: prompt → Meshy.ai 3D → Blender turntable → YouTube video. Sibling of meshy-bottube-mcp (agents); YouTube for human reach.

Tool
Input
generate_3d_model
prompt, art_style
generate_3d_from_image
image (URL/path)
generate_3d_from_images
1–4 images

Specs

  • ToolInput
  • generate_3d_modelprompt, art_style
  • generate_3d_from_imageimage (URL/path)
  • generate_3d_from_images1–4 images
  • retexture_modelmodel + style
  • rig_model · animate_modelmodel / rig+action_id
  • get_meshy_task_statustask_id
  • render_turntable · frames_to_video.glb / frames
  • upload_to_youtube.mp4 , title

README

meshy-youtube-mcp

BCOS Ready
License: MIT

What is meshy-youtube-mcp? (answer-first)

meshy-youtube-mcp is a Python MCP server that lets an AI agent generate a
Meshy.ai 3D model, render it with Blender and ffmpeg, and publish the resulting
video to YouTube through OAuth-backed videos.insert.
For LLM/search/answer
engine context, see the root llms.txt profile.

An MCP server that takes a text prompt all the way to a published YouTube video:
Meshy.ai 3D generation → Blender turntable → YouTube upload.

prompt ──▶ Meshy text-to-3D ──▶ Blender 360° turntable ──▶ ffmpeg ──▶ YouTube videos.insert
            (.glb model)          (PNG frames)             (.mp4)        (published video)

Any MCP-capable agent — Claude, or anything that speaks MCP
— can call it to generate rotating 3D content and publish it straight to YouTube.

Sibling project: meshy-bottube-mcp
publishes the same pipeline to BoTTube (a video network for AI agents).
BoTTube is the agent-native channel; YouTube is the human-reach channel — same
Meshy generation, two audiences. Pick the publisher that fits who's watching.

The shared render core is proven end-to-end on the BoTTube edition:
a PBR-textured turntable and an
animated walking character (the
render_animation moving-clip path).

Tools

Tool Input Output
generate_3d_model prompt, art_style .glb + task ids (preview→refine, PBR textured)
generate_3d_from_image image (URL/path) .glb from a single image
generate_3d_from_images 1–4 images .glb from multiple reference images
retexture_model model + style re-textured .glb variant
rig_model · animate_model model / rig+action_id rigged / animated .glb
get_meshy_task_status task_id status / .glb on success
render_turntable · frames_to_video .glb / frames PNG frames / .mp4
upload_to_youtube .mp4, title video_id, watch_url (OAuth)
meshy_to_youtube prompt one-shot: text → 3D → turntable → published
image_to_youtube image one-shot: image → 3D → turntable → published
retexture_to_youtube model + style one-shot: re-texture → turntable → published
animate_to_youtube model, action_id one-shot: rig → animate → render motion → published

Requirements

  • Python 3.10+
  • ffmpeg and Blender on PATH
  • A Meshy.ai API key
  • A Google account + a YouTube OAuth client (one-time setup, below)

Install

git clone https://github.com/Scottcjn/meshy-youtube-mcp
cd meshy-youtube-mcp
pip install -r requirements.txt
cp .env.example .env   # add your MESHY_API_KEY

One-time YouTube authorization

YouTube uploads use OAuth2 (not a simple API key). Set it up once:

  1. Google Cloud Console → create/select a project
  2. Enable YouTube Data API v3
  3. Credentials → Create OAuth client ID → Desktop app → download the JSON
  4. Save it as ~/.config/meshy-youtube-mcp/client_secret.json
    (or set YOUTUBE_CLIENT_SECRET_FILE)
  5. Authorize once — opens a browser, mints a reusable token:
python -m meshy_youtube.authorize

After that, uploads run unattended via the stored refresh token. You only
re-authorize if the token is revoked or deleted.

Quota: YouTube's default free quota is 10,000 units/day and a
videos.insert costs 1,600 — about 6 uploads/day. Request more in the
Cloud Console if you need it.

Run as an MCP server

{
  "mcpServers": {
    "meshy-youtube": {
      "command": "python3",
      "args": ["/path/to/meshy-youtube-mcp/meshy_youtube/server.py"],
      "env": {
        "MESHY_API_KEY": "your_meshy_key",
        "YOUTUBE_TOKEN_FILE": "/home/you/.config/meshy-youtube-mcp/token.json"
      }
    }
  }
}

Then ask your agent: "Generate a 3D crystal dragon and publish it to YouTube as
an unlisted turntable."
It calls meshy_to_youtube and hands back a watch URL.

You can also pip install -e . and run meshy-youtube-mcp, or
python -m meshy_youtube.server.

Use as a library

from meshy_youtube import meshy, turntable, video, youtube

info  = meshy.generate("a steampunk robot", "model.glb", art_style="realistic")
tt    = turntable.render(info["glb_path"], "frames/", resolution=1080)
mp4   = video.frames_to_video(tt["frames_dir"], "turntable.mp4")
res   = youtube.upload(mp4, title="Steampunk Robot — 3D Turntable",
                       tags=["3d", "meshy"], privacy="unlisted")
print(res["watch_url"])

Privacy & categories

  • privacy: public | unlisted | private (default unlisted — shareable
    by link, not surfaced publicly until you choose to).
  • category_id: YouTube category. Defaults to 22 (People & Blogs). Common ones:
    1 Film & Animation, 20 Gaming, 23 Comedy, 24 Entertainment,
    28 Science & Technology.

Behavior notes

  • The one-shot meshy_to_youtube always returns a dict (ok + watch_url,
    or ok=False + error/failed_stage + partial paths). Granular tools raise.
  • Secrets (client_secret.json, token.json, .env) are gitignored and the
    token is written 0600. Never commit them.
  • The Meshy/Blender/ffmpeg stages are shared, hardened code from the
    BoTTube edition (two-stage
    preview→refine, atomic GLB download, subprocess isolation, numeric frame
    normalization, bounds + preflight).

Roadmap

v0.1–v0.2 (shipped): two-stage Meshy generation, PBR texturing controls
(texture_prompt/enable_pbr), Blender turntable, YouTube OAuth publish
(resumable upload, atomic 0600 token, COPPA madeForKids as an explicit
choice), resilient polling, 21 tests.

v0.3 (shipped): the full Meshy modality set — image-to-3D, multi-image-to-3D,
retexture, and rigging + animation (rig a humanoid, apply a motion from
Meshy's 500+ action library, and render the moving character via a dedicated
Blender animation-render path).

Note: Meshy's 3D-to-Video is a web-app feature with no public API, so it
can't be an MCP tool. The rig→animate→render chain delivers the same outcome.

Next: multi-model scenes (camera moves, staging), smarter per-style framing.

Tests

python -m unittest discover -s tests -v

License

MIT © 2026 Scott Boudreaux / Elyan Labs.