MCP Server

RYLA

ai.ryla/ryla
Design & Creative Media & Content Public & reachable MCP 2025-11-25

What this MCP does

Generates AI influencer images, face swaps, and consistent-character sheets.

ryla_account_credits_balance
Check the authenticated user's current RYLA credit balance.
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}, 'additionalProperties': False}
ryla_account_gallery_list
List the authenticated user's most recent generated images/jobs.
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'limit': {'type': 'integer', 'maximum': 50, 'minimum': 1, 'description': 'Max number of items to return (default 20, max 50)'}}, 'additionalProperties': False}
ryla_generate_avatar_video
Generate a talking avatar video from a character face + an audio track (kie.ai InfiniTalk). Pro plan required. Character must already exist; use ryla_list_characters to find a characterId. Returns a jobId; poll with ryla_generation_status.
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['characterId'], 'properties': {'prompt': {'type': 'string', 'description': 'Optional prompt/description for the avatar video'}, 'audioUrl': {'type': 'string', 'format': 'uri', 'description': 'URL of the audio file (MP3/WAV/M4A, max 5MB, 2-60s). Required unless voiceNoteId is set.'}, 'duration': {'enum': [5, 10], 'type': 'number', 'default': 5, 'description': 'Video duration in seconds'}, 'modelTier': {'enum': ['standard', 'pro'], 'type': 'string', 'description': 'Model quality tier (default pro)'}, 'aspectRatio': {'enum': ['1:1', '9:16', '16:9'], 'type': 'string', 'description': 'Video aspect ratio (default 16:9)'}, 'characterId': {'type': 'string', 'format': 'uuid', 'description': 'Character UUID to use as the avatar face'}, 'voiceNoteId': {'type': 'string', 'format': 'uuid', 'description': 'UUID of a saved voice note to use as the audio track instead of audioUrl'}, 'sourceImageId': {'type': 'string', 'format': 'uuid', 'description': 'UUID of a specific image to use as the face source. If omitted, the character base image is used.'}}, 'additionalProperties': False}
ryla_generate_base_image
Generate base character images from a niche/vibe/prompt. Returns a jobId; poll with ryla_generation_status.
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {'vibe': {'type': 'string', 'description': 'Overall vibe/style descriptor'}, 'niche': {'type': 'string', 'description': 'Content niche, e.g. "fitness"'}, 'nsfwEnabled': {'type': 'boolean', 'default': False, 'description': 'Enable unrestricted fan content generation'}, 'promptInput': {'type': 'string', 'description': 'Free-form prompt text'}}, 'additionalProperties': False}
ryla_generate_character_sheet
Generate a multi-angle character sheet from a base image. Returns a jobId; poll with ryla_generation_status.
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['baseImageUrl'], 'properties': {'nsfw': {'type': 'boolean', 'default': False, 'description': 'Enable unrestricted fan content generation'}, 'angles': {'type': 'array', 'items': {'type': 'string'}, 'description': 'Optional list of angle presets'}, 'characterId': {'type': 'string', 'format': 'uuid', 'description': 'Character UUID'}, 'baseImageUrl': {'type': 'string', 'format': 'uri', 'description': 'Base image URL for PuLID character sheet generation'}}, 'additionalProperties': False}
ryla_generate_face_swap
Swap a character face onto a reference base image. Returns the generation result.
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['baseImageUrl', 'prompt'], 'properties': {'nsfw': {'type': 'boolean', 'default': False, 'description': 'Enable unrestricted fan content generation'}, 'seed': {'type': 'integer', 'description': 'Random seed for reproducibility'}, 'prompt': {'type': 'string', 'description': 'Prompt for the target image'}, 'characterId': {'type': 'string', 'format': 'uuid', 'description': 'Character UUID'}, 'baseImageUrl': {'type': 'string', 'format': 'uri', 'description': 'Reference/base image URL to swap the face from'}}, 'additionalProperties': False}
ryla_generate_image
Generate Studio-quality images for an existing character with full creative control (scene, outfit, pose, lighting, expression, style). This is the primary, full-featured image tool -- prefer it over ryla_generate_base_image. Character must already exist; use ryla_list_characters to find a characterId. Returns a jobId; poll with ryla_generation_status.
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['characterId', 'scene', 'aspectRatio'], 'properties': {'nsfw': {'type': 'boolean', 'default': False, 'description': 'Enable unrestricted fan content generation'}, 'seed': {'type': 'integer', 'description': 'Base seed; each image increments it'}, 'count': {'type': 'integer', 'default': 1, 'maximum': 10, 'minimum': 1, 'description': 'Number of images to generate'}, 'scene': {'type': 'string', 'description': 'Scene preset or description'}, 'loraId': {'type': 'string', 'description': 'LoRA id to use, if not the default for this character'}, 'outfit': {'type': 'string', 'description': 'Outfit description'}, 'poseId': {'type': 'string', 'description': 'Pose preset id, e.g. "standing-casual"'}, 'quality': {'type': 'string', 'description': 'Quality tier: "standard" (HD, default) or "ultra" (4K)'}, 'useLora': {'type': 'boolean', 'description': 'Use the character LoRA for face consistency, if trained'}, 'lighting': {'type': 'string', 'description': 'Lighting preset, e.g. "natural.goldenHour"'}, 'shotType': {'type': 'string', 'description': 'Camera framing, e.g. "close-up-portrait", "full-body"'}, 'expression': {'type': 'string', 'description': 'Facial expression preset, e.g. "positive.smile"'}, 'aspectRatio': {'enum': ['1:1', '9:16', '2:3', '4:5', '3:4', '4:3', '16:9', '3:2'], 'type': 'string', 'description': 'Image aspect ratio'}, 'characterId': {'type': 'string', 'format': 'uuid', 'description': 'Character UUID to generate images for'}, 'environment': {'type': 'string', 'description': 'Environment preset or description'}, 'stylePreset': {'enum': ['ultraRealistic', 'instagramReady', 'editorialFashion', 'casualSelfie', 'professionalPortrait'], 'type': 'string', 'description': 'Visual style preset (default ultraRealistic)'}, 'loraStrength': {'type': 'number', 'maximum': 2, 'minimum': 0.1, 'description': 'LoRA strength, 0.1-2.0'}, 'realismStyle': {'type': 'boolean', 'description': 'Apply realism post-processing style'}, 'promptEnhance': {'type': 'boolean', 'description': 'Enable AI prompt enhancement (default true)'}, 'enableFaceSwap': {'type': 'boolean', 'description': 'Route through face-swap for the reference image'}, 'referenceMethod': {'enum': ['instantid', 'pulid', 'ipadapter'], 'type': 'string', 'description': 'Reference image method (default instantid)'}, 'antiDetectPreset': {'enum': ['subtle', 'moderate', 'aggressive', 'advanced', 'maximum'], 'type': 'string', 'description': 'Anti-detection intensity (default moderate); advanced/maximum require Pro'}, 'socialMediaReady': {'type': 'boolean', 'description': 'Apply anti-AI-detection post-processing'}, 'referenceImageUrl': {'type': 'string', 'description': 'Reference image URL for face consistency (InstantID/PuLID), as an alternative to LoRA'}, 'referenceStrength': {'type': 'number', 'maximum': 1, 'minimum': 0.1, 'description': 'Reference image strength, 0.1-1.0'}}, 'additionalProperties': False}
ryla_generate_lip_sync
Generate a talking video by lip-syncing a portrait image to an audio track (kie.ai InfiniTalk). Both portraitImageUrl and audioUrl must be RYLA-hosted URLs you own. Pro plan required. This capability may not be available on your account yet (internal rollout, pricing not finalized) -- an unavailable-feature error means it is not yet live for you.
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['portraitImageUrl', 'audioUrl', 'prompt'], 'properties': {'prompt': {'type': 'string', 'minLength': 1, 'description': 'Prompt describing the desired output (required)'}, 'audioUrl': {'type': 'string', 'format': 'uri', 'description': 'Audio track URL (RYLA-hosted storage URL you own)'}, 'portraitImageUrl': {'type': 'string', 'format': 'uri', 'description': 'Portrait/face image URL (RYLA-hosted storage URL you own)'}}, 'additionalProperties': False}
ryla_generate_video
Generate a Studio video for an existing character (image-to-video). Character must already exist; use ryla_list_characters to find a characterId. Returns a jobId; poll with ryla_generation_status.
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['characterId', 'aspectRatio'], 'properties': {'fps': {'enum': [24, 30], 'type': 'number', 'description': 'Frames per second (default 24)'}, 'nsfw': {'type': 'boolean', 'default': False, 'description': 'Enable unrestricted fan content generation'}, 'seed': {'type': 'integer', 'description': 'Optional seed for reproducibility'}, 'prompt': {'type': 'string', 'description': 'Optional prompt/description for the video'}, 'useLora': {'type': 'boolean', 'description': 'Use character LoRA for face consistency (default true)'}, 'duration': {'enum': [2, 4, 5, 6, 8], 'type': 'number', 'default': 4, 'description': 'Video duration in seconds'}, 'aspectRatio': {'enum': ['1:1', '9:16', '16:9'], 'type': 'string', 'description': 'Video aspect ratio'}, 'characterId': {'type': 'string', 'format': 'uuid', 'description': 'Character UUID to generate video for'}, 'realismStyle': {'type': 'boolean', 'description': 'Apply photorealism post-processing'}}, 'additionalProperties': False}
ryla_generate_video_swap
Swap a character face into an existing video (face swap onto uploaded footage). Pro plan required. videoUrl must be a video you already uploaded to your RYLA account. Character must already exist; use ryla_list_characters to find a characterId. Returns a jobId; poll with ryla_generation_status.
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['characterId', 'videoUrl'], 'properties': {'videoUrl': {'type': 'string', 'format': 'uri', 'description': 'URL of the source video to swap (must be a RYLA-hosted storage URL you own)'}, 'sourceType': {'enum': ['instagram', 'tiktok', 'youtube', 'upload'], 'type': 'string', 'description': 'Source type (default upload)'}, 'characterId': {'type': 'string', 'format': 'uuid', 'description': 'Character UUID whose face is swapped into the video'}, 'outfitPrompt': {'type': 'string', 'description': 'Outfit description, used only when outfitEnabled is true'}, 'outfitEnabled': {'type': 'boolean', 'description': 'Enable an outfit-change prompt'}, 'backgroundPrompt': {'type': 'string', 'description': 'Background description, used only when backgroundEnabled is true'}, 'backgroundEnabled': {'type': 'boolean', 'description': 'Enable a background-change prompt'}}, 'additionalProperties': False}
ryla_generate_voice
Generate speech audio (TTS) in an existing character's voice. Character must already exist; use ryla_list_characters to find a characterId.
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['characterId', 'text'], 'properties': {'text': {'type': 'string', 'maxLength': 1000, 'description': 'Text to convert to speech (max 1000 chars)'}, 'speed': {'type': 'number', 'maximum': 2, 'minimum': 0.5, 'description': 'Speech speed multiplier, 0.5-2.0'}, 'gender': {'enum': ['female', 'male'], 'type': 'string', 'description': 'Character gender, to pick a default voice when voiceIdentityId is absent'}, 'emotion': {'enum': ['neutral', 'happy', 'sad', 'whisper', 'laugh', 'seductive', 'angry'], 'type': 'string', 'description': 'Emotion style for the voice'}, 'characterId': {'type': 'string', 'format': 'uuid', 'description': 'Character UUID'}, 'voiceIdentityId': {'type': 'string', 'description': 'Specific voice identity id, if known (otherwise the character default is used)'}}, 'additionalProperties': False}
ryla_generation_status
Check the status of a generation job by its jobId.
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'required': ['jobId'], 'properties': {'jobId': {'type': 'string', 'description': 'The jobId returned by a ryla_generate_* tool call'}}, 'additionalProperties': False}
ryla_list_characters
List the authenticated user's existing characters (AI influencers) so you can pick a characterId for the other generation tools. There is no tool to CREATE a character -- that happens in the RYLA app at app.ryla.ai.
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}, 'additionalProperties': False}
ryla_server_info
Get RYLA external MCP server configuration and connection info
Input schema
{'type': 'object', '$schema': 'http://json-schema.org/draft-07/schema#', 'properties': {}, 'additionalProperties': False}
Added
ryla_server_info
Sept. 17, 2026, 7:57 a.m.
Added
ryla_generate_lip_sync
Sept. 17, 2026, 7:57 a.m.
Added
ryla_generate_video_swap
Sept. 17, 2026, 7:57 a.m.
Added
ryla_generate_avatar_video
Sept. 17, 2026, 7:57 a.m.
Added
ryla_generate_voice
Sept. 17, 2026, 7:57 a.m.
Added
ryla_generate_video
Sept. 17, 2026, 7:57 a.m.
Added
ryla_generate_image
Sept. 17, 2026, 7:57 a.m.
Added
ryla_list_characters
Sept. 17, 2026, 7:57 a.m.
Added
ryla_account_gallery_list
Sept. 17, 2026, 7:57 a.m.
Added
ryla_account_credits_balance
Sept. 17, 2026, 7:57 a.m.
Added
ryla_generation_status
Sept. 17, 2026, 7:57 a.m.
Added
ryla_generate_character_sheet
Sept. 17, 2026, 7:57 a.m.
Added
ryla_generate_face_swap
Sept. 17, 2026, 7:57 a.m.
Added
ryla_generate_base_image
Sept. 17, 2026, 7:57 a.m.