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.
| Field | Required | Input definition |
|---|---|---|
limit | No | z.number().int().min(1).max(50).optional()How many designs to return. Default 10, max 50. |
since | No | z.string().optional()ISO date — only return designs created at or after this time. |
published_only | No | z.boolean().optional()Only return designs published to the public gallery. |
memm_get_designRead one saved result and its prompt.
| Field | Required | Input definition |
|---|---|---|
id | Yes | z.string().uuid()The design's UUID. |
memm_search_gallerySearch the public Memm gallery.
| Field | Required | Input definition |
|---|---|---|
query | No | z.string().optional()Free text matched against brand, prompt and slug. |
category | No | z.string().optional()Exact category filter. |
limit | No | z.number().int().min(1).max(50).optional()Default 10, max 50. |
memm_get_creditsRead your balance, plan, and account limits.
No input fields required.
memm_generate_designLegacy compatibility tool. Use memm_generate for new work.
| Field | Required | Input definition |
|---|---|---|
prompt | Yes | z.string().min(1)What to generate. Be specific and visual. |
model | No | z.enum(MCP_MODELS).optional()Default google/nano-banana (fastest, cheapest). Arabic overlay text renders best on gpt-image-2. |
quality | No | z.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_ratio | No | z.enum(MCP_ASPECT_RATIOS).optional()Default 1:1. |
text_overlay | No | z.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_language | No | z.enum(MCP_TEXT_LANGUAGES).optional()Required when text_overlay is true. Rejected when it is false. |
reference_image_urls | No | z.array(z.string().url()).max(4).optional()Up to 4 product/reference image URLs. Routes to the image-aware pipeline. |
confirm_credit_cost | Yes | z.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_key | No | z.string().optional()Stable key for this generation. Re-sending the same key returns the existing design free. |
memm_list_brandsList saved brand profiles.
| Field | Required | Input definition |
|---|---|---|
limit | No | z.number().int().min(1).max(50).optional()Default 20. |
memm_get_brandRead one brand profile.
| Field | Required | Input definition |
|---|---|---|
id | Yes | z.string().uuid()The brand's UUID. |
memm_list_productsList products and their reference images.
| Field | Required | Input definition |
|---|---|---|
limit | No | z.number().int().min(1).max(50).optional()Default 20. |
memm_upload_referenceUpload a small reference image. Prefer upload tickets for local files.
| Field | Required | Input definition |
|---|---|---|
image_base64 | Yes | z.string().min(1)The image bytes, base64-encoded; small images only (under about 200 KB). A data: URI prefix is accepted and stripped. |
filename | No | z.string().optional()Original filename, for reference. |
product_id | No | z.string().uuid().optional()Attach to an existing product. Omit to create a new one. |
product_name | No | z.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.
| Field | Required | Input definition |
|---|---|---|
filename | Yes | z.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_type | Yes | z.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_bytes | No | z.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.
| Field | Required | Input definition |
|---|---|---|
name | Yes | z.string().min(1)Product name, e.g. 'Durra Ketchup Hot 750g'. |
category | No | z.string().optional() |
memm_quote_generation_costGet an exact quote without generating.
| Field | Required | Input definition |
|---|---|---|
model | No | z.string().min(1).optional()A model key from memm_list_models (or a memm_generate_design model). Omit only when you pass jobs. |
option | No | z.string().optional()memm_generate: the option id from memm_list_models. Omit only for memm_generate_design. |
quality | No | z.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. |
shape | No | z.enum(MCP_STUDIO_SHAPES).optional()memm_generate: the shape you will use. |
mode | No | z.enum(MCP_STUDIO_MODES).optional()memm_generate: how images are used. |
image_count | No | z.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_views | Yes | GENERATION_FIELDS.image_views |
pose_mode | Yes | GENERATION_FIELDS.pose_mode |
audio_url | No | z.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. |
presenter | No | z.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_url | No | z.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. |
resolution | No | z.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_orientation | No | z.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_urls | No | z.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. |
jobs | No | z.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.
| Field | Required | Input definition |
|---|---|---|
model | Yes | z.string().min(1)Model key from memm_list_models, e.g. nano-banana-2 or veo-3.1-lite. |
option | No | z.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. |
shape | No | z.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. |
prompt | Yes | z.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). |
mode | No | z.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_urls | No | z.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_views | No | z.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_mode | No | z.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. |
voice | No | z.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. |
language | No | z.enum(MCP_AUDIO_LANGUAGES).optional()Voice-over only: ar or en. Default: read from the script. |
dialect | No | z.string().min(1).max(10).optional()Voice-over only, models that list dialects (audio.dialects), language ar: auto or the model's own id. |
pace | No | z.enum(MCP_AUDIO_PACES).optional()Voice-over only, models with a speed control (audio.paces): slow, normal or fast. |
style | No | z.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. |
instrumental | No | z.boolean().optional()Music only: true (the default) for no vocals; false for a song, which on models with audio.lyricsMaxCharacters also needs lyrics. |
lyrics | No | z.string().max(4000).optional()Music only, models with audio.lyricsMaxCharacters, with instrumental false: the lyrics to sing. |
seconds | No | z.number().int().min(1).max(22).optional()Sound effects only: length in whole seconds (1 to 22). Omit to let the model decide. |
audio_url | No | z.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. |
presenter | No | z.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_url | No | z.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. |
resolution | No | z.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_orientation | No | z.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). |
quality | No | z.enum(["pro", "standard"]).optional()Kling 3.0 Motion Control only: pro (default) or standard. |
keep_original_sound | No | z.boolean().optional()Kling 3.0 Motion Control and video-edit models only: keep the video's own sound (default true) or not (false). |
talking_style | No | z.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_confirmed | No | z.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_basis | No | z.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_cost | Yes | z.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_key | No | z.string().min(1).max(200).optional()Stable key for this generation. Re-sending the same key returns the first job and charges nothing. |
project_id | No | z.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.
| Field | Required | Input definition |
|---|---|---|
jobs | Yes | z.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_cost | Yes | z.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_key | Yes | z.string().min(1).max(160)Required. Stable key for this batch: re-sending it returns the jobs already made and charges them nothing. |
project_id | No | z.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.
| Field | Required | Input definition |
|---|---|---|
job_id | No | z.string().uuid().optional()jobId from memm_generate or memm_list_jobs. |
job_ids | No | z.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.
| Field | Required | Input definition |
|---|---|---|
job_id | Yes | z.string().uuid()jobId of the queued clip, from memm_generate or memm_list_jobs. |
memm_list_jobsList recent jobs, optionally filtered by media kind.
| Field | Required | Input definition |
|---|---|---|
limit | No | z.number().int().min(1).max(50).optional()Default 10, max 50. |
kind | No | z.enum(MCP_JOB_KINDS).optional()Only one kind of job: image, video, voice, music or 3d. |