Skip to content
docs
MEMM DOCUMENTATION

MCP tool reference

The tools and accepted input fields extracted from Memm’s server definitions.

Last reviewed:

Use the connected schema

Connect through https://memm.ai/api/mcp using an MCP client. Discover the current contract with MCP tools/list; invoke tools through tools/call. These are protocol methods, not separate REST URLs.

The reference below is generated from the server source whenever documentation is built. Required fields describe the outer schema; some combinations have additional rules explained in the guides. Tool names and parameter names stay in English in both languages. The connected schema and a fresh quote take precedence over examples.

Tools and inputs

memm_list_designsList the saved results in your account.
FieldRequiredInput definition
limitNoz.number().int().min(1).max(50).optional()

How many designs to return. Default 10, max 50.

sinceNoz.string().optional()

ISO date — only return designs created at or after this time.

published_onlyNoz.boolean().optional()

Only return designs published to the public gallery.

memm_get_designRead one saved result and its prompt.
FieldRequiredInput definition
idYesz.string().uuid()

The design's UUID.

memm_get_creditsRead your balance, plan, and account limits.

No input fields required.

memm_generate_designLegacy compatibility tool. Use memm_generate for new work.
FieldRequiredInput definition
promptYesz.string().min(1)

What to generate. Be specific and visual.

modelNoz.enum(MCP_MODELS).optional()

Default google/nano-banana (fastest, cheapest). Arabic overlay text renders best on gpt-image-2.

qualityNoz.enum(MCP_QUALITIES).optional()

gpt-image-2 only. 'hi-fi' costs more than standard (see memm_quote_generation_cost). Omit for the other models.

aspect_ratioNoz.enum(MCP_ASPECT_RATIOS).optional()

Default 1:1.

text_overlayNoz.boolean().optional()

Default false, and false is what this account almost always wants: all copy is added afterwards in Canva, so images must ship TEXT-FREE. When false, do NOT write a headline, tagline, caption or any 'TEXT OVERLAY' section into the prompt — the call will be REFUSED if you do. Describe only scene, product and composition, and ask for clear negative space where the copy will later sit.

text_languageNoz.enum(MCP_TEXT_LANGUAGES).optional()

Required when text_overlay is true. Rejected when it is false.

reference_image_urlsNoz.array(z.string().url()).max(4).optional()

Up to 4 product/reference image URLs. Routes to the image-aware pipeline.

confirm_credit_costYesz.number().int()

Must equal creditCost from memm_quote_generation_cost, in UNITS (1 credit = 400 units), not in credits, or the call is refused.

idempotency_keyNoz.string().optional()

Stable key for this generation. Re-sending the same key returns the existing design free.

memm_list_brandsList saved brand profiles.
FieldRequiredInput definition
limitNoz.number().int().min(1).max(50).optional()

Default 20.

memm_get_brandRead one brand profile.
FieldRequiredInput definition
idYesz.string().uuid()

The brand's UUID.

memm_list_productsList products and their reference images.
FieldRequiredInput definition
limitNoz.number().int().min(1).max(50).optional()

Default 20.

memm_upload_referenceUpload a small reference image. Prefer upload tickets for local files.
FieldRequiredInput definition
image_base64Yesz.string().min(1)

The image bytes, base64-encoded; small images only (under about 200 KB). A data: URI prefix is accepted and stripped.

filenameNoz.string().optional()

Original filename, for reference.

product_idNoz.string().uuid().optional()

Attach to an existing product. Omit to create a new one.

product_nameNoz.string().optional()

Name for the new product when product_id is omitted.

memm_get_upload_ticketGet a ticket to upload a local image, song, or video directly to Memm.
FieldRequiredInput definition
filenameYesz.string().min(1).max(255)

The file's name with its extension (.jpg, .jpeg, .png, .webp, .mp3, .wav, .mp4 or .mov), for example product.png or song.mp3.

content_typeYesz.enum(TICKET_CONTENT_TYPES)

image/jpeg, image/png or image/webp (a photo); audio/mpeg or audio/wav (a song); video/mp4 or video/quicktime (a motion video), matching the file's extension.

size_bytesNoz.number().int().optional()

The file size in bytes: pass it when you know it (stat the file). Checked against the limit (10 MB photo, 15 MB song, 100 MB video) before a ticket is used up, and a file over 4.4 MB is sent straight to storage instead of through memm.ai.

memm_create_productCreate a product to group reference images.
FieldRequiredInput definition
nameYesz.string().min(1)

Product name, e.g. 'Durra Ketchup Hot 750g'.

categoryNoz.string().optional()

memm_quote_generation_costGet an exact quote without generating.
FieldRequiredInput definition
modelNoz.string().min(1).optional()

A model key from memm_list_models (or a memm_generate_design model). Omit only when you pass jobs.

optionNoz.string().optional()

memm_generate: the option id from memm_list_models. Omit only for memm_generate_design.

qualityNoz.enum([...MCP_QUALITIES, "pro"]).optional()

memm_generate_design only (gpt-image-2): standard or hi-fi. For Kling 3.0 Motion Control: pro (default) or standard.

shapeNoz.enum(MCP_STUDIO_SHAPES).optional()

memm_generate: the shape you will use.

modeNoz.enum(MCP_STUDIO_MODES).optional()

memm_generate: how images are used.

image_countNoz.number().int().min(0).max(10).optional()

memm_generate: how many image_urls you will attach; memm_generate_design: how many reference_image_urls. Default 0.

image_viewsYesGENERATION_FIELDS.image_views

pose_modeYesGENERATION_FIELDS.pose_mode

audio_urlNoz.string().url().optional()

Wan 2.7 Lip-sync: the song or recording to lip-sync to (3 to 15 sec). HeyGen Avatar IV: the voice-over recording the photo speaks (1 to 15 sec). HeyGen Avatar V: the voice-over recording the chosen presenter speaks (1 to 15 sec). A Memm url from memm_get_upload_ticket (content_type audio/mpeg or audio/wav; MP3 or WAV, never trimmed). It must be the caller's own upload. Memm reads its length to pick the price tier.

presenterNoz.string().min(1).max(80).optional()

HeyGen Avatar V only: the presenter's name, exactly one of the names in its memm_list_models drivenBy.presenters (copy it exactly, spelling and capitals; the USER chooses it). An unknown name is refused before any charge. It does not change the price. Not for any other model.

video_urlNoz.string().url().optional()

Models driven by the user's own video only: Kling 3.0 Motion Control (the motion video, 3 to 30 sec; 3 to 10 sec with character_orientation image) and a video-edit model (the video to edit, 3 to 10 sec). A Memm url from memm_get_upload_ticket (content_type video/mp4 or video/quicktime; MP4 or MOV, up to 100 MB). It must be the caller's own upload. Memm reads its length to pick the price tier.

resolutionNoz.enum(["720p", "1080p"]).optional()

Wan 2.7 Lip-sync only: 1080p (default) or 720p (costs less). Video-edit models: 1080p (default) or 720p (costs less). HeyGen Avatar IV and V have none: they are always 1080p.

character_orientationNoz.enum(["video", "image"]).optional()

Kling 3.0 Motion Control only: video (default) = the character's pose follows the motion video (complex moves, up to 30 sec); image = it follows the photo (camera moves, up to 10 sec).

image_urlsNoz.array(z.string().url()).max(1).optional()

Wan 2.7 Lip-sync, HeyGen Avatar IV and Kling 3.0 Motion Control only: the ONE photo you will send to memm_generate (the same url). It does not change the price. HeyGen Avatar V takes none.

jobsNoz.array(z.object({ model: z.string().min(1), option: z.string().optional(), shape: z.enum(MCP_STUDIO_SHAPES).optional(), mode: z.enum(MCP_STUDIO_MODES).optional(), image_count: z.number().int().min(0).max(10).optional(), })).min(1).max(10).optional()

memm_generate_batch: the batch's jobs (each its model, option, shape, mode and image_count), in order. Returns each price and totalCredits (= confirm_total_credit_cost).

memm_list_modelsDiscover models and options available to your account.

No input fields required.

memm_generateGenerate after approving the quote. Use a stable retry key.
FieldRequiredInput definition
modelYesz.string().min(1)

Model key from memm_list_models, e.g. nano-banana-2 or veo-3.1-lite.

optionNoz.string().optional()

Option id from memm_list_models (resolution, quality or duration), e.g. 10s-720p for Gemini Omni Flash 1.1 (any whole second 3 to 10 at 360p, 720p or 1080p). Default: the model's usual option (Omni: 4s-720p). For Wan 2.7 Lip-sync, HeyGen Avatar IV and V, Kling 3.0 Motion Control and Wan 2.7 Edit the options are price caps picked from the file's length: leave option out, or send one that matches resolution / quality (5s-1080p is 1080p, std-10s is standard) and whose cap covers the file; a mismatch is refused.

shapeNoz.enum(MCP_STUDIO_SHAPES).optional()

Square, Tall (9:16), Wide (16:9), 3:4 or 4:5; must be one of the model's shapes. Default Square, or the model's first shape. HeyGen Avatar IV and V: Tall (the default), Square, 4:5 or Wide.

promptYesz.string()

What to make. Be specific and visual. For images/videos, respect promptMaxCharacters from memm_list_models; longer is not automatically better. Keep the full brief in your project and send only the generation directions. For 3D photo modes this is only a title and may be empty; it does not change the geometry. For Wan 2.7 Edit the prompt is REQUIRED: it is the edit instruction, what to change in the user's video (for example "make the background a sunset beach"), not a description of a new scene. For Wan 2.7 Lip-sync it is the optional performance direction (feeling and movement, never appearance; in English, up to 500 characters, same price; send an empty string for none and never invent one); for Kling 3.0 Motion Control it is an optional scene description; HeyGen Avatar IV and V take no text (send an empty string).

modeNoz.enum(MCP_STUDIO_MODES).optional()

How image_urls are used. text: none. reference: photos to edit or follow (image and some video models). image: one photo (3D) or start frame (video). frames: start frame then end frame (video). 3D reference: several views of the SAME object. Default: text without images; reference for image models; image for one image on a video or 3D model; reference for several 3D photos. Wan 2.7 Edit: text (the default) means no photo, image means one optional reference photo.

image_urlsNoz.array(z.string().url()).max(10).optional()

Memm image URLs only: designs (memm_list_designs, memm_get_job), product images (memm_list_products) or uploads (memm_get_upload_ticket, or memm_upload_reference for a small image). Other hosts are refused. memm_list_models shows how many each mode takes.

image_viewsNoz.array(z.enum(MCP_THREED_VIEWS)).max(8).optional()

3D only, when the mode lists views: one view id per image_url, in the same order. Omit for Meshy and Rodin. Tripo must fill front, left, back, right without gaps; Hunyuan accepts any listed views including front.

pose_modeNoz.enum(["", "a-pose", "t-pose"]).optional()

Meshy 3D only: request A-pose or T-pose, or omit/empty for no specific pose. Works with text, one photo or multiple views; independent of the rigged option.

voiceNoz.string().min(1).max(60).optional()

Voice-over only: a voice id from memm_list_models (audio.voices). Default: the first voice of the language.

languageNoz.enum(MCP_AUDIO_LANGUAGES).optional()

Voice-over only: ar or en. Default: read from the script.

dialectNoz.string().min(1).max(10).optional()

Voice-over only, models that list dialects (audio.dialects), language ar: auto or the model's own id.

paceNoz.enum(MCP_AUDIO_PACES).optional()

Voice-over only, models with a speed control (audio.paces): slow, normal or fast.

styleNoz.string().max(400).optional()

Voice-over only, models that take a delivery direction (audio.styleMaxCharacters): how to say it, in plain words. Counts toward the character limit.

instrumentalNoz.boolean().optional()

Music only: true (the default) for no vocals; false for a song, which on models with audio.lyricsMaxCharacters also needs lyrics.

lyricsNoz.string().max(4000).optional()

Music only, models with audio.lyricsMaxCharacters, with instrumental false: the lyrics to sing.

secondsNoz.number().int().min(1).max(22).optional()

Sound effects only: length in whole seconds (1 to 22). Omit to let the model decide.

audio_urlNoz.string().url().optional()

Wan 2.7 Lip-sync: the song or recording to lip-sync to (3 to 15 sec). HeyGen Avatar IV: the voice-over recording the photo speaks (1 to 15 sec). HeyGen Avatar V: the voice-over recording the chosen presenter speaks (1 to 15 sec). A Memm url from memm_get_upload_ticket (content_type audio/mpeg or audio/wav; MP3 or WAV, never trimmed). It must be the caller's own upload. Memm reads its length to pick the price tier.

presenterNoz.string().min(1).max(80).optional()

HeyGen Avatar V only: the presenter's name, exactly one of the names in its memm_list_models drivenBy.presenters (copy it exactly, spelling and capitals; the USER chooses it). An unknown name is refused before any charge. It does not change the price. Not for any other model.

video_urlNoz.string().url().optional()

Models driven by the user's own video only: Kling 3.0 Motion Control (the motion video, 3 to 30 sec; 3 to 10 sec with character_orientation image) and a video-edit model (the video to edit, 3 to 10 sec). A Memm url from memm_get_upload_ticket (content_type video/mp4 or video/quicktime; MP4 or MOV, up to 100 MB). It must be the caller's own upload. Memm reads its length to pick the price tier.

resolutionNoz.enum(["720p", "1080p"]).optional()

Wan 2.7 Lip-sync only: 1080p (default) or 720p (costs less). Video-edit models: 1080p (default) or 720p (costs less). HeyGen Avatar IV and V have none: they are always 1080p.

character_orientationNoz.enum(["video", "image"]).optional()

Kling 3.0 Motion Control only: video (default) = the character's pose follows the motion video (complex moves, up to 30 sec); image = it follows the photo (camera moves, up to 10 sec).

qualityNoz.enum(["pro", "standard"]).optional()

Kling 3.0 Motion Control only: pro (default) or standard.

keep_original_soundNoz.boolean().optional()

Kling 3.0 Motion Control and video-edit models only: keep the video's own sound (default true) or not (false).

talking_styleNoz.enum(["stable", "expressive"]).optional()

HeyGen Avatar IV only (Avatar V has none): stable (the default, calm) or expressive (lively). It does not change the price.

consent_confirmedNoz.boolean().optional()

Deprecated and ignored. Memm no longer asks for a permission line for Wan 2.7 Lip-sync, Kling 3.0 Motion Control or Wan 2.7 Edit: do not ask the user about it and do not send this field.

consent_basisNoz.enum(["self", "someone_else", "not_real"]).optional()

Deprecated and ignored, like consent_confirmed: do not ask the user who is in the photo and do not send this field.

confirm_credit_costYesz.number().min(0).multipleOf(0.5)

The price in CREDITS from memm_quote_generation_cost: a whole or half number such as 1, 1.5 or 2 (Nano Banana 2 is 1.5). Must match exactly or nothing runs.

idempotency_keyNoz.string().min(1).max(200).optional()

Stable key for this generation. Re-sending the same key returns the first job and charges nothing.

project_idNoz.string().uuid().optional()

Put the result in this Canvas project (a projectId from memm_list_projects). Omit for the main canvas.

memm_generate_batchSubmit supported jobs with a confirmed total price. Check accepted media kinds.
FieldRequiredInput definition
jobsYesz.array(z.object(GENERATION_FIELDS)).min(1).max(10)

The jobs, in the order they should run. Each takes memm_generate's fields (model, option, shape, prompt, mode, image_urls, and the voice and music fields).

confirm_total_credit_costYesz.number().min(0).multipleOf(0.5)

totalCredits from memm_quote_generation_cost for these same jobs, in CREDITS (halves allowed). Must match exactly or nothing runs.

idempotency_keyYesz.string().min(1).max(160)

Required. Stable key for this batch: re-sending it returns the jobs already made and charges them nothing.

project_idNoz.string().uuid().optional()

Put every result in this Canvas project (a projectId from memm_list_projects). Omit for the main canvas.

memm_list_projectsList projects and their IDs to choose a destination.

No input fields required.

memm_get_jobCheck one or several jobs and read their result links.
FieldRequiredInput definition
job_idNoz.string().uuid().optional()

jobId from memm_generate or memm_list_jobs.

job_idsNoz.array(z.string().uuid()).min(1).max(10).optional()

Several jobIds at once (up to 10), e.g. the jobIds of a memm_generate_batch answer. Use instead of job_id.

memm_cancel_jobCancel a waiting video job and refund its credits.
FieldRequiredInput definition
job_idYesz.string().uuid()

jobId of the queued clip, from memm_generate or memm_list_jobs.

memm_list_jobsList recent jobs, optionally filtered by media kind.
FieldRequiredInput definition
limitNoz.number().int().min(1).max(50).optional()

Default 10, max 50.

kindNoz.enum(MCP_JOB_KINDS).optional()

Only one kind of job: image, video, voice, music or 3d.