Ludo AI Game Assets
OfficialLudo AI MCP Server
Generate game assets using AI through the Model Context Protocol (MCP).
Features
Category | Capabilities |
Images | Sprites, icons, screenshots, backgrounds, UI assets, textures, background removal |
3D Models | Convert 2D images to GLB models with PBR textures, auto-rig models (skeleton + skin weights, engine-ready joint naming), text-driven skeletal animation, retarget curated animation presets onto rigged models |
Animation | Animated spritesheets from static sprites (4-64 frames), motion transfer from video or presets, spritesheet editing (re-prompt, outpaint, loop fixing) |
Video | Generate short videos from images or reference images (1-15 seconds, varies by model), prompt-driven video editing, 2x upscaling |
Audio | Sound effects, background music, character voices, TTS |
Related MCP server: ComfyMCP Studio
Quick Start
1. Get an API Key
Sign up at ludo.ai and get your API key from app.ludo.ai.
2. Configure Your MCP Client
Claude Desktop
Add to ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows):
{
"mcpServers": {
"ludo": {
"url": "https://mcp.ludo.ai/mcp",
"headers": {
"Authorization": "ApiKey YOUR_API_KEY"
}
}
}
}Cursor
Add to your MCP settings in Cursor preferences:
{
"mcpServers": {
"ludo": {
"url": "https://mcp.ludo.ai/mcp",
"headers": {
"Authorization": "ApiKey YOUR_API_KEY"
}
}
}
}Available Tools
Image Generation (createImage)
Generate sprites, icons, backgrounds, UI assets, and textures from a text prompt alone (no source image needed). To match the art style of an existing image use generateWithStyle, to modify an existing image use editImage, and to cut out a subject use removeBackground.
Parameter | Required | Description |
| Yes | Detailed description of the image |
| Yes |
|
| No |
|
| No |
|
| No |
|
| No | Number of variations (1-8, default: 1) |
| No | Client-provided ID to retrieve results later |
Credits: 0.5 per image
Edit Image (editImage)
Modify an existing image using text instructions (smart editing).
Parameter | Required | Description |
| Yes | URL or base64-encoded image to edit |
| Yes | Description of changes (e.g., "remove the background", "make it darker", "add clouds to the sky") |
| No | URL or base64 reference image for style/content guidance |
| No | Number of variations (1-4, default: 1) |
| No | Client-provided ID to retrieve results later |
Credits: 0.5 per image
Generate with Style (generateWithStyle)
Generate new content while maintaining the visual style of a reference image.
Parameter | Required | Description |
| Yes | URL or base64-encoded reference image for style matching |
| Yes | Description of what to generate (e.g., "a warrior character", "a treasure chest") |
| Yes |
|
| No | Number of variations (1-4, default: 1) |
| No | Client-provided ID to retrieve results later |
Credits: 0.5 per image
Generate Pose (generatePose)
Generate a new pose for an existing sprite. Use this BEFORE animateSprite to get the best animation results - the starting pose should match your intended animation.
Parameter | Required | Description |
| Yes | URL or base64-encoded sprite image |
| Yes | Target pose: |
| No | Additional instructions to guide pose generation |
| No | Number of variations (1-4, default: 1) |
| No | Client-provided ID to retrieve results later |
Returns: url, pose, motion_prompt
Example workflow:
Generate a "Walk (Left)" pose with
generatePoseUse the returned
motion_promptdirectly inanimateSpritefor optimal animation results
Credits: 0.5 per image
Rotate Sprite (rotateSprite)
Rotate the camera view of an existing sprite to a new angle, keeping the same character and pose. Useful for generating turnaround / directional views of a sprite.
Parameter | Required | Description |
| Yes | URL or base64-encoded sprite image |
| Yes | Camera azimuth in degrees: |
| No | Camera tilt in degrees: |
| No | Number of variations (1-4, default: 1) |
| No | Client-provided ID to retrieve results later |
Returns: url, camera_rotation, camera_elevation
Credits: 0.5 per image
Remove Background (removeBackground)
Remove the background from a single image, returning the subject isolated on a transparent background. For broader edits (not just cutting out the subject), use editImage instead.
Parameter | Required | Description |
| Yes | URL or base64-encoded image |
| No | Trim the result to the subject's bounding box (default: false) |
| No | Higher-quality output that may not match the input pixel-for-pixel (default: true) |
| No | Client-provided ID to retrieve results later |
Returns: a single result with url (transparent PNG)
Credits: 0.5 per image
3D Model Generation (create3DModel)
Convert a 2D image to a 3D GLB model with textures.
Parameter | Required | Description |
| Yes | URL or base64-encoded image |
| No |
|
| No |
|
| No | Triangle count 1,000-200,000 (default: 50,000) |
| No | Client-provided ID to retrieve results later |
Returns: model_url (GLB file) + 4 snapshot images from different angles
Credits: 3 per model Processing time: 60-120 seconds
Rig 3D Model (rigModel)
Generate a skeleton and skin weights for an existing 3D model so it can be animated. Non-destructive to the geometry — it returns a new rigged GLB. Rig a model before using animate3DModel.
Parameter | Required | Description |
| Yes | URL or base64-encoded GLB to rig |
| No | Which skeleton to build: |
| No | Bone naming convention for the identified joints: |
| No | Optional client-provided identifier for this request |
Returns: model_url (rigged GLB — skeleton + skin weights baked in), rigged (true)
Credits: 1 per rig Processing time: 60-120 seconds
Animate 3D Model (animate3DModel)
Generate text-driven skeletal animations for an already-rigged 3D model (rig it first with rigModel). Animation quality is hit-or-miss, so several candidates are returned for you to choose from. Each candidate is a standalone animation-only GLB (skeleton + one clip, no mesh) plus an mp4 preview — pick the best one and fuse it onto your model in a game engine or three.js.
Parameter | Required | Description |
| Yes | URL or base64-encoded rigged GLB to animate (rig it first with |
| Yes | Desired motion (e.g., "walking", "swinging an axe", "waving hello") |
| No | Animation representation: |
| No | Number of candidate animations to generate (1-8, default: 4) |
| No | Return to the initial pose — each clip plays forward then mirrors back to the rest pose for a seamless loop (default: true). Best for one-way motions (crouch, punch, wave); reads oddly for cyclic gaits like walking |
| No | Rewrite the prompt into a detailed motion caption behind the scenes (default: true) |
| No | Optional client-provided identifier for this request |
Returns: animations — an array of candidates, each with clip_name, glb_url (animation-only GLB), preview_url (mp4), mode, seed, motion, fit_rmse
Credits: 0.2 per generation (one charge returns all variants) Processing time: 60-120 seconds
Animate 3D Model from Preset (animate3DModelPreset)
Apply a curated animation preset to an already-rigged 3D model (retargeting). Unlike animate3DModel, the motion comes from a professionally curated clip library instead of a text prompt, so exactly one clip is returned. The model must have a humanoid-template rig — rig it with rig_type humanoid_template or humanoid_template_hands first. Only presets that expose a clip_url in listAnimationPresets can be applied.
Parameter | Required | Description |
| Yes | URL or base64-encoded rigged GLB (humanoid-template rig) |
| Yes | id of a preset from |
| No | Trim the animation to the span that loops seamlessly. Omit for Auto: cyclic motions (walk, idle) loop, one-shots (jump, cast) keep their full arc |
| No | Remove the animation's net travel so the character moves on the spot — the treadmill clip a game engine expects, with the engine driving locomotion. Omit to follow |
| No | Optional client-provided identifier for this request |
Returns: animations — same envelope as animate3DModel, containing one clip with clip_name, preset_id, glb_url (animation-only GLB, joints named as on your model), preview_url (mp4), seed, motion, fit_rmse
Credits: 0.2 per retarget Processing time: 30-90 seconds
Sprite Animation (animateSprite)
Create animated spritesheets from static images.
Parameter | Required | Description |
| Yes | URL or base64 of the starting frame |
| Yes | Animation description (e.g., "walking cycle", "idle breathing", "attack slash") |
| No |
|
| No |
|
| No |
|
| No | Seamless loop (default: true) |
| No | Crop frames to fit content; smaller spritesheets but inconsistent frame sizes |
| No | Horizontal padding around the sprite as a ratio 0.0–1.0 (only used when |
| No | Vertical padding around the sprite as a ratio 0.0–1.0 (only used when |
| No | Deprecated — uniform padding on both axes, equivalent to setting both per-axis params to the same value. Cannot be combined with the per-axis params (fails with 400) |
| No |
|
| No | Augment the motion prompt behind the scenes (default: true) |
| No |
|
| No | Depends on model — Blitz: |
| No | Ending frame for interpolation |
| No | Generate an animated GIF (default: false) |
| No | Extract individual frame images (default: false) |
| No | Also return the spritesheet with background intact, before background removal (default: false) |
| No | Client-provided ID to retrieve results later |
Returns: spritesheet_url, video_url, gif_url, individual_frame_urls, spritesheet_with_background_url, individual_frame_with_background_urls, num_frames, num_cols, num_rows
Credits: Varies by duration and model, each with a 4-credit minimum — Forge: 1.5/sec, Blitz: 1.9/sec, Eagle: 2.6/sec, Eagle with Audio: 3.1/sec (e.g. Blitz 3s ≈ 5.7). Processing time: 30-90 seconds
Animation Presets (listAnimationPresets)
List available animation presets for use with motion transfer (transferMotion) and 3D retargeting (animate3DModelPreset). Returns preset animations, perspectives, and directions — no video URLs are exposed.
Returns:
animations— Array of presets withid,name,category,description,duration,preview_url, and — when the preset can be retargeted onto a rigged 3D model —clip_urlperspectives— Array withid,name,description(all animations support all perspectives)directions—["N", "NE", "E", "SE", "S", "SW", "W", "NW"](all animations support all directions)
Credits: Free
Motion Transfer (transferMotion)
Transfer motion from a video or animation preset onto a static sprite, producing an animated spritesheet.
Parameter | Required | Description |
| Yes | URL or base64-encoded sprite image |
| No | URL of the video to use as motion source. You can use videos from the animateSprite endpoint or provide your own. Videos up to 4 seconds will produce better results. Either |
| No | ID of an animation preset to use instead of a video URL. Use the animation-presets endpoint to list available presets. When using a preset, |
| No | Direction for the animation preset. When using a preset, |
| No | Perspective ID to use with the animation preset. When using a preset, |
| No | Number of frames in the output spritesheet |
| No | Size of each frame in pixels |
| No | Trim animation for seamless loop |
| No | Crop frames to fit content |
| No | Horizontal padding around the sprite (0.0–1.0). Useful for animations that extend sideways, e.g. sword slashes or punches |
| No | Vertical padding around the sprite (0.0–1.0). Useful for animations that extend up or down, e.g. jumps |
| No | Deprecated — uniform padding on both axes (0.0–1.0, default 0.15 when no margin is given). Cannot be combined with the per-axis params (fails with 400) |
| No |
|
| No | Generate an animated GIF (default: false) |
| No | Extract individual frame images (default: false) |
| No | Also return the spritesheet with background intact, before background removal (default: false) |
| No |
|
| No | Animation length in seconds: |
| No | Client-provided ID to retrieve results later |
Returns: spritesheet_url, video_url, gif_url, individual_frame_urls, spritesheet_with_background_url, individual_frame_with_background_urls, num_frames, num_cols, num_rows
Credits: Varies by duration and model, 4-credit minimum. Tango: 4 credits/sec (default 1.5s = 6, up to 16 at 4s); Forge: 2 credits/sec (1.5s = 4, up to 8 at 4s)
Edit Spritesheet (editSpritesheet)
Edit a spritesheet you previously generated: re-prompt its animation, outpaint beyond the frame, or repair a bad loop. Pass back the spritesheet_url you received from animateSprite, transferMotion, or an earlier edit — it must be a spritesheet you generated in the last 7 days (external URLs are not accepted).
Parameter | Required | Description |
| Yes | URL of a spritesheet you generated in the last 7 days |
| No |
|
| No | Edit instruction. Required for |
| No | Up to 5 reference images (URL or base64) to guide the edit |
| No | Output length in seconds: |
| No |
|
| No | Crop frames to fit content |
| No | Trim animation for seamless loop (default: true) |
| No | Frames in the output spritesheet: |
| No | Frame size in pixels: |
| No | Generate an animated GIF (default: false) |
| No | Extract individual frame images (default: false) |
| No | Also return the spritesheet with background intact (default: false) |
| No | Client-provided ID to retrieve results later |
Returns: same shape as animateSprite (spritesheet_url, video_url, gif_url, num_frames, num_cols, num_rows, ...)
Credits: Varies by duration: 2 credits/sec with a 4-credit minimum (3s = 6, 4s = 8)
Video Generation (createVideo)
Generate short videos from images.
Parameter | Required | Description |
| Yes | URL or base64 starting frame |
| Yes | Motion description (e.g., "camera zooms in", "character walks forward") |
| No | Depends on model (defaults to the model's shortest) — Blitz: |
| No |
|
| No | Ending frame for interpolation |
| No | Client-provided ID to retrieve results later |
Credits: Varies by duration and model. Standard model: 1 credit/sec (3s = 3, 5s = 5, 8s = 8, 10s = 10). Higher-quality models cost more per second.
Video from References (createVideoFromReferences)
Generate a video from 1-5 reference images and a text prompt. Unlike createVideo, which animates a single source image, this composes a new scene that borrows characters, objects, and style from the references.
Parameter | Required | Description |
| Yes | Text description of the video to generate |
| Yes | 1 to 5 reference images (URL or base64) |
| No | Video length in seconds: |
| No |
|
| No |
|
| No | Client-provided ID to retrieve results later |
Returns: url, duration, has_audio
Credits: Varies by duration and model. Eagle: 1.5 credits/sec (5s = 7.5); Eagle with Audio: 2 credits/sec (5s = 10)
Edit Video (editVideo)
Edit a video you previously generated with a text prompt and optional reference images (video-to-video). Pass back the url you received from createVideo, createVideoFromReferences, or an earlier edit — it must be a video you generated in the last 7 days (external URLs are not accepted).
Parameter | Required | Description |
| Yes | URL of a video you generated in the last 7 days |
| Yes | Edit instruction describing the desired change |
| No | Up to 5 reference images (URL or base64) to guide the edit |
| No | Output length in seconds: |
| No |
|
| No | Client-provided ID to retrieve results later |
Returns: url, duration, has_audio
Credits: Varies by duration: 2 credits/sec (5s = 10)
Upscale Video (upscaleVideo)
Upscale a video you previously generated to twice its resolution (2x). Pass back the url you received from createVideo, createVideoFromReferences, or editVideo — it must be a video you generated in the last 7 days (external URLs are not accepted). Only videos below 960x960 pixels can be upscaled; larger sources are rejected.
Parameter | Required | Description |
| Yes | URL of a video you generated in the last 7 days, below 960x960 pixels |
| No | Client-provided ID to retrieve results later |
Returns: url, duration, has_audio
Credits: Flat rate by duration, independent of model: 0.2 credits/sec (5s = 1)
Sound Effect Generation (createSoundEffect)
Generate game sound effects from text descriptions.
Parameter | Required | Description |
| Yes | Sound description (e.g., "laser gun firing", "footsteps on gravel", "coin pickup") |
| No | 0-10 seconds (0 = automatic) |
| No | Client-provided ID to retrieve results later |
Credits: 2 per sound
Ambiance Generation (createAmbiance)
Generate ambient soundscapes and background atmospheres from text descriptions.
Parameter | Required | Description |
| Yes | Ambiance description (e.g., "windy forest at dusk", "busy medieval market", "spaceship engine hum") |
| No | Duration in seconds (0 = automatic, based on the description) |
| No | Augment the prompt behind the scenes (default: true) |
| No | Client-provided ID to retrieve results later |
Credits: 2 per generation
Music Generation (createMusic)
Generate background music and themes.
Parameter | Required | Description |
| Yes | Music description (e.g., "epic orchestral battle theme", "calm piano melody", "8-bit chiptune") |
| No | Optional lyrics for vocal tracks |
| No | Client-provided ID to retrieve results later |
Credits: 3 per track
Audio Transform (createAudioTransform)
Remix or transform an existing audio sample using a text prompt.
Parameter | Required | Description |
| Yes | URL or base64-encoded source audio sample to remix (15MB max) |
| Yes | Description guiding the remix (e.g., "make it sound like an 80s synthwave track") |
| No | Duration in seconds: |
| No | How strongly the source is modified (0 = close to original) |
| No | Augment the prompt behind the scenes (default: true) |
| No | Client-provided ID to retrieve results later |
Credits: 3 per generation
Voice Generation (createVoice)
Generate unique character voices.
Parameter | Required | Description |
| Yes | Character description (e.g., "gruff old warrior", "cheerful young girl") |
| Yes | Text to speak (max 200 characters) |
| No |
|
| No | Client-provided ID to retrieve results later |
Credits: 1 per voice
Text-to-Speech (createSpeech)
Clone a voice from an audio sample.
Parameter | Required | Description |
| Yes | Text to speak (max 1000 characters) |
| Yes | URL or base64 audio sample for voice cloning |
| No | Client-provided ID to retrieve results later |
Credits: 1 per generation
Text-to-Speech Preset (createSpeechPreset)
Use preset voices for text-to-speech.
Parameter | Required | Description |
| Yes | Text to speak (max 1000 characters) |
| Yes |
|
| No |
|
| No |
|
| No | Client-provided ID to retrieve results later |
Credits: 1 per generation
Retrieve Image Results (getImageResults)
Retrieve your recent API-generated images.
Parameter | Required | Description |
| No | Filter to a specific request |
Returns: Array of image objects with url, request_id, created_at
Credits: Free
Retrieve Sprite Results (getSpriteResults)
Retrieve your recent API-generated spritesheets.
Parameter | Required | Description |
| No | Filter to a specific request |
Returns: Array of spritesheet objects with request_id, created_at
Credits: Free
Retrieve Video Results (getVideoResults)
Retrieve your recent API-generated videos.
Parameter | Required | Description |
| No | Filter to a specific request |
Returns: Array of video objects with url, request_id, created_at
Credits: Free
Retrieve Audio Results (getAudioResults)
Retrieve your recent API-generated audio.
Parameter | Required | Description |
| No | Filter to a specific request |
Returns: Array of audio objects with request_id, created_at
Credits: Free
Retrieve 3D Model Results (get3DModelResults)
Retrieve your recent API-generated 3D models.
Parameter | Required | Description |
| No | Filter to a specific request |
Returns: Array of 3D asset objects with request_id, created_at
Credits: Free
How Generation Calls Work
Every generation tool is synchronous: the call blocks until the asset is ready and returns the result (with its URLs) directly in the response. There is no separate polling step, and dropping the connection before the call returns cancels the request. Long-running operations such as 3D models and animations can take 30–120 seconds, so allow a generous client-side timeout.
Retrieving Results Later
Every generation tool also accepts an optional request_id. This does not make the call asynchronous — it tags the result so you can fetch it again afterwards from the matching results endpoint (for example from a different session, or to list everything tied to one request). The result is persisted only after the synchronous call has completed successfully.
# Generate a sprite animation — this call blocks and returns the spritesheet directly
animateSprite with request_id="my-anim-001", initial_image="url", motion_prompt="walking"
# Later, re-fetch that same result (e.g. in another session) by its request_id
getSpriteResults with request_id="my-anim-001"Results are available for 7 days, and each results endpoint is free and returns up to 100 recent API-generated assets.
Asset URL Expiration
All generated asset URLs (images, spritesheets, videos, audio, 3D models) point to Google Cloud Storage links that expire after 7 days. Any asset that needs to outlive that window — especially assets destined for production use — must be downloaded and saved locally (or re-uploaded to permanent storage) right away. Never store the returned URLs as permanent references.
The server also announces this to MCP clients via its instructions field during the initialize handshake, so models connected through clients that surface server instructions will be reminded automatically.
Example Prompts
Creating Game Assets
Create a pixel art knight character with sword and shield, side view, 16-bit styleGenerate an isometric treasure chest icon for a mobile RPGCreate a low-poly stylized tree for a casual mobile gameAnimations
Animate this character with a smooth walking cycle, 16 framesCreate an idle breathing animation for this character spriteRig this 3D character with a humanoid template using Mixamo joint names, then apply a walk animation preset to itAnimate this fire sprite as a looping VFX effectAudio
Create a satisfying coin pickup sound effect for a platformerGenerate an epic orchestral boss battle theme, intense and dramaticCreate a voice for a wise old wizard saying "The journey begins now"API Documentation
Full API documentation with all parameters and response formats: api.ludo.ai/api-documentation
Support
License
Proprietary - See ludo.ai/terms for terms of service.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- Flicense-qualityDmaintenanceGenerate animated pixel art characters, tilesets, and object directly from your AI coding assistant!Last updated38
- FlicenseAqualityDmaintenanceGenerates 2D game assets (sprites, icons, tilesets, characters, animations) using AI workflows powered by ComfyUI with support for viewpoint control, style presets, and Unity export.Last updated131
- Alicense-qualityCmaintenanceEnables users to generate and manage 2D game assets like sprites, characters, and backgrounds directly from their development environment using the Layer.ai platform. It supports asset creation with transparency, prompt optimization, and automatic saving of generated files to local project directories.Last updatedMIT
- Alicense-qualityBmaintenanceGenerates mock 2D PNG assets for game prototypes, supporting gradients, patterns, text, spritesheets, and embedded metadata.Last updated784MIT
Related MCP Connectors
Discover AI tools for game development — 100+ tools indexed by engine, task, and pricing.
Generate logos, social posts, app screenshots, comic panels & visual-novel assets from prompts.
AI image, video & music generation. Flux, Veo 3.1, Suno V5. Free tier included.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/Ludo-AI/ludo-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server