GenMagic

Generate images, video, speech, music and text with 450+ AI models, one API key and one balance.

Should I use this

Quality & Safety

A
Description quality
96%
Schema completeness
99%
Naming quality
100%
Poisoning risk
100%
Permission match
100%
Protocol compliance
100%

Findings (1)

  • LOWTool 'generate_speech' description lacks action verbin generate_speech

Based on automated analysis of tool definitions and protocol compliance.

Context Cost

~1,862Tokens (tool definitions)
~2.1 KBTypical response size
Moderate attention impact (1.45% of 128k context)

This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.

Install

One-Click Install

Add this to your `claude_desktop_config.json` file:

{
  "mcpServers": {
    "genmagic": {
      "url": "https://genmagic.co/api/mcp"
    }
  }
}

Remote endpoints

https://genmagic.co/api/mcpstreamable-http

What it can do

Tool inventory

Tools (7)

🟢 Read-only🟡 Write🔴 Delete⚪ Unknown
🟡list_models(category, search, capability, limit)

List the AI models GenMagic runs, newest first, with each one's id, price and key details (context window and capabilities for text, voices for speech, resolutions, clip lengths and sound for video). Pass a model's id as 'model' to generate_text, generate_image, generate_speech, generate_music or create_video. Filter by category and search; the model marked default is the one that runs when no model is named (for generate_text, when no type is given either). Needs no API key and costs nothing.

Input Schema

{
  "type": "object",
  "properties": {
    "category": {
      "type": "string",
      "description": "Only models of this kind. audio holds both speech and music models.",
      "enum": [
        "text",
        "image",
        "audio",
        "video"
      ]
    },
    "search": {
      "type": "string",
      "description": "Only models whose id or name contains this text, e.g. veo, flux, claude."
    },
    "capability": {
      "type": "string",
      "description": "Text models only: keep models with this capability.",
      "enum": [
        "reasoning",
        "vision",
        "tools",
        "structured"
      ]
    },
    "limit": {
      "type": "integer",
      "description": "How many models to return (1-100, default 25).",
      "minimum": 1,
      "maximum": 100
    }
  }
}
🟢generate_text(prompt, type, model, system, attachments)

Generate text with GenMagic: copy, an answer, a draft, code, an SVG graphic, or a complete web page. Pass 'type' to make a specific artifact ("website" for a full self-contained HTML page, "svg" for a vector graphic, "code" for a code snippet, "writing" for prose); omit it for plain text. Attach files for the model to read via 'attachments' (PDF, Word/Excel/PowerPoint, CSV, text/code, images, audio); GenMagic converts anything a model cannot ingest natively. If the caller's account has brand personalization on, the output comes out on-brand automatically, and a website or svg also picks up the brand's palette and typeface.

Input Schema

{
  "type": "object",
  "properties": {
    "prompt": {
      "type": "string",
      "description": "What to write or produce."
    },
    "type": {
      "type": "string",
      "description": "The kind of artifact to make. Omit for plain text.",
      "enum": [
        "writing",
        "code",
        "svg",
        "website"
      ]
    },
    "model": {
      "type": "string",
      "description": "Optional GenMagic model id for the text (call list_models with category \"text\" for the ids and prices). Omit it to let GenMagic choose its default."
    },
    "system": {
      "type": "string",
      "description": "Optional system instruction to steer tone, role, or format."
    },
    "attachments": {
      "type": "array",
      "description": "Files for the model to read. Each item is { name, mime, dataUrl } where dataUrl is a base64 data URL (data:<mime>;base64,...). Any type is accepted: PDF, docx/xlsx/pptx, csv, text/code, images, audio.",
      "items": {
        "type": "object",
        "properties": {
          "name": {
            "type": "string",
            "description": "Filename, e.g. report.pdf."
          },
          "mime": {
            "type": "string",
            "description": "MIME type, e.g. application/pdf."
          },
          "dataUrl": {
            "type": "string",
            "description": "data:<mime>;base64,<bytes>"
          }
        },
        "required": [
          "dataUrl"
        ]
      }
    }
  },
  "required": [
    "prompt"
  ]
}
⚪generate_image(prompt, size, image, type, model)

Generate an image from a text description with GenMagic. Pass 'image' (an https or data URL) to transform THAT image instead of generating from scratch (image-to-image), and type "logo" to make a brand mark. Returns the image inline plus a hosted URL. On-brand automatically when the account has brand personalization on.

Input Schema

{
  "type": "object",
  "properties": {
    "prompt": {
      "type": "string",
      "description": "A description of the image to create (or the edit to make when 'image' is given)."
    },
    "size": {
      "type": "string",
      "description": "Image size, e.g. 1024x1024 (square), 1792x1024 (wide), 1024x1792 (tall).",
      "enum": [
        "1024x1024",
        "1792x1024",
        "1024x1792"
      ]
    },
    "image": {
      "type": "string",
      "description": "Optional reference image (an https URL or a data:image URL) to transform (image-to-image), e.g. a character to keep consistent."
    },
    "type": {
      "type": "string",
      "description": "Set to 'logo' to generate a brand mark instead of a picture.",
      "enum": [
        "image",
        "logo"
      ]
    },
    "model": {
      "type": "string",
      "description": "Optional GenMagic model id for the image (call list_models with category \"image\" for the ids and prices). Omit it to let GenMagic choose its default."
    }
  },
  "required": [
    "prompt"
  ]
}
⚪generate_speech(input, voice, model)

Turn text into spoken audio with GenMagic. Returns the audio inline plus a hosted URL. The text is voiced verbatim.

Input Schema

{
  "type": "object",
  "properties": {
    "input": {
      "type": "string",
      "description": "The text to speak, read aloud verbatim."
    },
    "voice": {
      "type": "string",
      "description": "Optional voice name (e.g. alloy); list_models shows each speech model's voices. Defaults to a neutral voice."
    },
    "model": {
      "type": "string",
      "description": "Optional GenMagic model id for the speech (call list_models with category \"audio\" for the ids and prices). Omit it to let GenMagic choose its default."
    }
  },
  "required": [
    "input"
  ]
}
⚪generate_music(prompt, model)

Generate an original music track from a text description with GenMagic. Returns the audio inline plus a hosted URL. On-brand in mood automatically when the account has brand personalization on.

Input Schema

{
  "type": "object",
  "properties": {
    "prompt": {
      "type": "string",
      "description": "A description of the music to create (genre, mood, instruments, tempo)."
    },
    "model": {
      "type": "string",
      "description": "Optional GenMagic model id for the music (call list_models with category \"audio\" for the ids and prices). Omit it to let GenMagic choose its default."
    }
  },
  "required": [
    "prompt"
  ]
}
🟡create_video(prompt, aspect_ratio, model, duration, resolution, ...)

Start generating a video from a text description with GenMagic (or animate an image: pass 'image' as the opening frame), with any text-to-video model, clip length, resolution and sound the model supports (list_models with category "video" shows them and the per-second price). Video is asynchronous, so this returns a job id immediately (nothing is charged yet). Poll it with the get_video tool every few seconds until the status is "completed" to get the hosted video URL. A failed render is never charged. On-brand automatically when the account has brand personalization on.

Input Schema

{
  "type": "object",
  "properties": {
    "prompt": {
      "type": "string",
      "description": "A description of the video to create."
    },
    "aspect_ratio": {
      "type": "string",
      "description": "Aspect ratio: 16:9 (landscape), 9:16 (portrait), or 1:1 (square). Defaults to 16:9.",
      "enum": [
        "16:9",
        "9:16",
        "1:1"
      ]
    },
    "model": {
      "type": "string",
      "description": "Optional GenMagic model id for the video (call list_models with category \"video\" for the ids and prices). Omit it to let GenMagic choose its default."
    },
    "duration": {
      "type": "integer",
      "description": "Clip length in seconds, one of the lengths the model supports (list_models shows durations_seconds). Omit for the model's default."
    },
    "resolution": {
      "type": "string",
      "description": "Output resolution the model supports, e.g. 720p or 1080p (list_models shows resolutions). Omit for the model's default."
    },
    "generate_audio": {
      "type": "boolean",
      "description": "Generate sound with the clip on models that support it (list_models shows audio_supported). Omit for the model's default."
    },
    "image": {
      "type": "string",
      "description": "Optional image (an https URL or a data:image URL) the clip opens on: image-to-video. The prompt then describes the motion. list_models shows each model's frame_images, and in its video prices image_input_usd or image_to_video_usd_per_second where a model bills image-to-video apart."
    },
    "last_frame": {
      "type": "string",
      "description": "Optional image (an https URL or a data:image URL) the clip ends on, for models whose frame_images include last_frame."
    }
  },
  "required": [
    "prompt"
  ]
}
🟡get_video(id)

Check a video started with create_video. Returns "queued" or "processing" while it renders, "completed" with the hosted video URL when it is ready, or a terminal failure if the render failed. Poll every few seconds until it is either completed or failed (both are terminal: stop polling once you see one). The clip is charged once, on completion.

Input Schema

{
  "type": "object",
  "properties": {
    "id": {
      "type": "string",
      "description": "The video job id returned by create_video."
    }
  },
  "required": [
    "id"
  ]
}

Community

Rate this Server

Evidence

Recent observations

verifiedversion not recorded7 tools
verifiedversion not recorded7 tools
verifiedversion not recorded7 tools
verifiedversion not recorded6 tools
verifiedversion not recorded6 tools
verifiedversion not recorded6 tools