Magic Hour
by magichourhq · remote · no sign-in to list tools · v0.1.0 · published by GitHub user magichourhq
Create and edit images, videos, and audio through Magic Hour's hosted Streamable HTTP MCP server.
46 tools: 3 can delete or cancel things, 29 change things and 14 only read.
Scanned Oct 21, 2026
- Deletes or cancels3Claude Code: deny: see these tools
- Can't be undone0Claude Code: ask
- Changes things29Claude Code: ask: see these tools
- Only reads14Claude Code: allow: see these tools
1 check matched something in the tool definitions. No finding is not a safety guarantee. How the checks work.
claude mcp add --transport http magic-hour https://mcp.magichour.ai/Findings
Matches of fixed checks, with the text they matched.
The description is 2,026 characters long, over the 2,000 this check looks for.
What this check looks forMatched text
description ends: "...xamples, see the [product page](https://magichour.ai/products/character-replace)."
Tools
Open a tool for its reasons and full description. Descriptions are the publisher's own words, shown as they are.
46 tools
Deletes or cancels 3Claude Code: deny
audio_projects_deletePermanently delete the rendered audio file(s).No findings
Why it is in this group
- The name "audio_projects_delete" says "delete": a word for removing or ending something.
- The description says "Permanently delete".
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Permanently delete the rendered audio file(s). This action is not reversible, please be sure before deleting.
Annotations the server declares
- title: Delete audio
- readOnlyHint: false
- destructiveHint: true
- openWorldHint: false
image_projects_deletePermanently delete the rendered image(s).No findings
Why it is in this group
- The name "image_projects_delete" says "delete": a word for removing or ending something.
- The description says "Permanently delete".
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Permanently delete the rendered image(s). This action is not reversible, please be sure before deleting.
Annotations the server declares
- title: Delete image
- readOnlyHint: false
- destructiveHint: true
- openWorldHint: false
video_projects_deletePermanently delete the rendered video.No findings
Why it is in this group
- The name "video_projects_delete" says "delete": a word for removing or ending something.
- The description says "Permanently delete".
- The server marks it destructive (destructiveHint: true).
Description, as the server wrote it Permanently delete the rendered video. This action is not reversible, please be sure before deleting.
Annotations the server declares
- title: Delete video
- readOnlyHint: false
- destructiveHint: true
- openWorldHint: false
Changes things 29Claude Code: ask
ai_clothes_changer_create_imageUse only with the user's own likeness or content they are authorized to use.No findings
Why it is in this group
- The name "ai_clothes_changer_create_image" says "create": a word for a change.
Description, as the server wrote it Use only with the user's own likeness or content they are authorized to use. Do not use for impersonation, deception, sexual content, or content involving minors. MCP guidance: - Starts an async image job; returns `id` and `credits_charged`. For finished results, call `wait_for_image_project` with that id or poll `GET /v1/image-projects/{id}` until `complete`, `error`, or `canceled`. Results include `downloads`; wait helpers add `exact_download_urls`. Preserve signed URLs and query parameters; never append expiration metadata. - For `*_file_path`, use an existing Magic Hour path or the upload-URL endpoint's `file_path` after uploading raw bytes to its presigned URL. Direct public media URLs may work if stable and fetchable as raw bytes; hotlinked URLs can fail. Prefer the upload-URL endpoint when unsure. Change outfits in photos in seconds with just a photo reference. Each photo costs 25 credits.
Annotations the server declares
- title: AI Clothes Changer
- readOnlyHint: false
- destructiveHint: false
- openWorldHint: true
ai_face_editor_edit_imageMCP guidance: - Starts an async image job; returns `id` and `credits_charged`.No findings
Why it is in this group
- The name "ai_face_editor_edit_image" says "edit": a word for a change.
Description, as the server wrote it MCP guidance: - Starts an async image job; returns `id` and `credits_charged`. For finished results, call `wait_for_image_project` with that id or poll `GET /v1/image-projects/{id}` until `complete`, `error`, or `canceled`. Results include `downloads`; wait helpers add `exact_download_urls`. Preserve signed URLs and query parameters; never append expiration metadata. - For `*_file_path`, use an existing Magic Hour path or the upload-URL endpoint's `file_path` after uploading raw bytes to its presigned URL. Direct public media URLs may work if stable and fetchable as raw bytes; hotlinked URLs can fail. Prefer the upload-URL endpoint when unsure. Edit facial features of an image using AI. Each edit costs 1 frame. The height/width of the output image depends on your subscription. Please refer to our [pricing](https://magichour.ai/pricing) page for more details
Annotations the server declares
- title: AI Face Editor
- readOnlyHint: false
- destructiveHint: false
- openWorldHint: true
ai_gif_generator_create_imageMCP guidance: - Starts an async image job; returns `id` and `credits_charged`.No findings
Why it is in this group
- The name "ai_gif_generator_create_image" says "create": a word for a change.
Description, as the server wrote it MCP guidance: - Starts an async image job; returns `id` and `credits_charged`. For finished results, call `wait_for_image_project` with that id or poll `GET /v1/image-projects/{id}` until `complete`, `error`, or `canceled`. Results include `downloads`; wait helpers add `exact_download_urls`. Preserve signed URLs and query parameters; never append expiration metadata. Create an AI GIF. Each GIF costs 50 credits.
Annotations the server declares
- title: AI GIF Generator
- readOnlyHint: false
- destructiveHint: false
- openWorldHint: false
ai_headshot_generator_create_imageMCP guidance: - Starts an async image job; returns `id` and `credits_charged`.No findings
Why it is in this group
- The name "ai_headshot_generator_create_image" says "create": a word for a change.
Description, as the server wrote it MCP guidance: - Starts an async image job; returns `id` and `credits_charged`. For finished results, call `wait_for_image_project` with that id or poll `GET /v1/image-projects/{id}` until `complete`, `error`, or `canceled`. Results include `downloads`; wait helpers add `exact_download_urls`. Preserve signed URLs and query parameters; never append expiration metadata. - For `*_file_path`, use an existing Magic Hour path or the upload-URL endpoint's `file_path` after uploading raw bytes to its presigned URL. Direct public media URLs may work if stable and fetchable as raw bytes; hotlinked URLs can fail. Prefer the upload-URL endpoint when unsure. Create an AI headshot. Each headshot costs 50 credits.
Annotations the server declares
- title: AI Headshot Generator
- readOnlyHint: false
- destructiveHint: false
- openWorldHint: true
ai_image_editor_create_imageMCP guidance: - Requires one or more source images in `assets.image_file_paths`.No findings
Why it is in this group
- The name "ai_image_editor_create_image" says "create": a word for a change.
Description, as the server wrote it MCP guidance: - Requires one or more source images in `assets.image_file_paths`. For prompt-only creation, use `ai_image_generator_create_image` instead. - Starts an async image job; returns `id` and `credits_charged`. For finished results, call `wait_for_image_project` with that id or poll `GET /v1/image-projects/{id}` until `complete`, `error`, or `canceled`. Results include `downloads`; wait helpers add `exact_download_urls`. Preserve signed URLs and query parameters; never append expiration metadata. - For `*_file_path`, use an existing Magic Hour path or the upload-URL endpoint's `file_path` after uploading raw bytes to its presigned URL. Direct public media URLs may work if stable and fetchable as raw bytes; hotlinked URLs can fail. Prefer the upload-URL endpoint when unsure. Edit supplied images using `assets.image_file_paths` and `style.prompt`. For prompt-only creation use `ai_image_generator_create_image`. Editing is not a required preparation step before image-to-video when the approved source already meets the brief. Check model eligibility: the omitted/default model is not universally available on Free.
Annotations the server declares
- title: Edit supplied images
- readOnlyHint: false
- destructiveHint: false
- openWorldHint: true
ai_image_generator_create_imageMCP guidance: - Starts an async image job; returns `id` and `credits_charged`.No findings
Why it is in this group
- The name "ai_image_generator_create_image" says "create": a word for a change.
Description, as the server wrote it MCP guidance: - Starts an async image job; returns `id` and `credits_charged`. For finished results, call `wait_for_image_project` with that id or poll `GET /v1/image-projects/{id}` until `complete`, `error`, or `canceled`. Results include `downloads`; wait helpers add `exact_download_urls`. Preserve signed URLs and query parameters; never append expiration metadata. Create an AI image with advanced model selection and quality controls.
Annotations the server declares
- title: AI Image Generator
- readOnlyHint: false
- destructiveHint: false
- openWorldHint: false
ai_image_upscaler_create_imageMCP guidance: - Starts an async image job; returns `id` and `credits_charged`.No findings
Why it is in this group
- The name "ai_image_upscaler_create_image" says "create": a word for a change.
Description, as the server wrote it MCP guidance: - Starts an async image job; returns `id` and `credits_charged`. For finished results, call `wait_for_image_project` with that id or poll `GET /v1/image-projects/{id}` until `complete`, `error`, or `canceled`. Results include `downloads`; wait helpers add `exact_download_urls`. Preserve signed URLs and query parameters; never append expiration metadata. - For `*_file_path`, use an existing Magic Hour path or the upload-URL endpoint's `file_path` after uploading raw bytes to its presigned URL. Direct public media URLs may work if stable and fetchable as raw bytes; hotlinked URLs can fail. Prefer the upload-URL endpoint when unsure. Upscale your image using AI. Each 2x upscale costs 50 credits for balanced/creative modes, and 25 credits for preserve. 4x upscale costs 200 and 100 credits respectively.
Annotations the server declares
- title: AI Image Upscaler
- readOnlyHint: false
- destructiveHint: false
- openWorldHint: true
ai_meme_generator_create_imageMCP guidance: - Starts an async image job; returns `id` and `credits_charged`.No findings
Why it is in this group
- The name "ai_meme_generator_create_image" says "create": a word for a change.
Description, as the server wrote it MCP guidance: - Starts an async image job; returns `id` and `credits_charged`. For finished results, call `wait_for_image_project` with that id or poll `GET /v1/image-projects/{id}` until `complete`, `error`, or `canceled`. Results include `downloads`; wait helpers add `exact_download_urls`. Preserve signed URLs and query parameters; never append expiration metadata. Create an AI generated meme. Each meme costs 10 credits.
Annotations the server declares
- title: AI Meme Generator
- readOnlyHint: false
- destructiveHint: false
- openWorldHint: true
ai_qr_code_generator_create_imageMCP guidance: - Starts an async image job; returns `id` and `credits_charged`.No findings
Why it is in this group
- The name "ai_qr_code_generator_create_image" says "create": a word for a change.
Description, as the server wrote it MCP guidance: - Starts an async image job; returns `id` and `credits_charged`. For finished results, call `wait_for_image_project` with that id or poll `GET /v1/image-projects/{id}` until `complete`, `error`, or `canceled`. Results include `downloads`; wait helpers add `exact_download_urls`. Preserve signed URLs and query parameters; never append expiration metadata. Create an AI QR code. Each QR code costs 0 credits.
Annotations the server declares
- title: AI QR Code Generator
- readOnlyHint: false
- destructiveHint: false
- openWorldHint: false
ai_talking_photo_create_talking_photoUse only with the user's own likeness or content they are authorized to use.No findings
Why it is in this group
- The name "ai_talking_photo_create_talking_photo" says "create": a word for a change.
Description, as the server wrote it Use only with the user's own likeness or content they are authorized to use. Do not use for impersonation, deception, sexual content, or content involving minors. MCP guidance: - Starts an async video job; returns `id` and `credits_charged`. For finished results, call `wait_for_video_project` with that id or poll `GET /v1/video-projects/{id}` until `complete`, `error`, or `canceled`. Results include `downloads`; wait helpers add `exact_download_urls`. Preserve signed URLs and query parameters; never append expiration metadata. - For `*_file_path`, use an existing Magic Hour path or the upload-URL endpoint's `file_path` after uploading raw bytes to its presigned URL. Direct public media URLs may work if stable and fetchable as raw bytes; hotlinked URLs can fail. Prefer the upload-URL endpoint when unsure. Requires a still portrait in `assets.image_file_path` and an existing recording in `assets.audio_file_path`, plus `start_seconds` and `end_seconds`. Text alone is not accepted; this tool does not synthesize speech. For existing video plus replacement audio, use `lip_sync_create_video` instead.
Annotations the server declares
- title: Make a still portrait speak from audio
- readOnlyHint: false
- destructiveHint: false
- openWorldHint: true
ai_ugc_ad_create_videoMCP guidance: - Starts an async video job; returns `id` and `credits_charged`.No findings
Why it is in this group
- The name "ai_ugc_ad_create_video" says "create": a word for a change.
- The input takes a statement or command to run (input.script), which can change anything it can reach.
Description, as the server wrote it MCP guidance: - Starts an async video job; returns `id` and `credits_charged`. For finished results, call `wait_for_video_project` with that id or poll `GET /v1/video-projects/{id}` until `complete`, `error`, or `canceled`. Results include `downloads`; wait helpers add `exact_download_urls`. Preserve signed URLs and query parameters; never append expiration metadata. - For `*_file_path`, use an existing Magic Hour path or the upload-URL endpoint's `file_path` after uploading raw bytes to its presigned URL. Direct public media URLs may work if stable and fetchable as raw bytes; hotlinked URLs can fail. Prefer the upload-URL endpoint when unsure. Create a spoken UGC video from a prepared image and script. Returns a project ID; poll GET /v1/video-projects/{id} for status and downloads. To compose an image, generate the image separately with the Image Editor API and supply its download URL.
Annotations the server declares
- title: AI UGC Ad Generator
- readOnlyHint: false
- destructiveHint: false
- openWorldHint: true
ai_video_editor_create_videoMCP guidance: - Starts an async video job; returns `id` and `credits_charged`.No findings
Why it is in this group
- The name "ai_video_editor_create_video" says "create": a word for a change.
Description, as the server wrote it MCP guidance: - Starts an async video job; returns `id` and `credits_charged`. For finished results, call `wait_for_video_project` with that id or poll `GET /v1/video-projects/{id}` until `complete`, `error`, or `canceled`. Results include `downloads`; wait helpers add `exact_download_urls`. Preserve signed URLs and query parameters; never append expiration metadata. - For `*_file_path`, use an existing Magic Hour path or the upload-URL endpoint's `file_path` after uploading raw bytes to its presigned URL. Direct public media URLs may work if stable and fetchable as raw bytes; hotlinked URLs can fail. Prefer the upload-URL endpoint when unsure. **What this API does** Create the same Video Editor you can make in the browser, but programmatically, so you can automate it, run it at scale, or connect it to your own app or workflow. **Good for** - Automation and batch processing - Adding video editor into apps, pipelines, or tools **How it works (3 steps)** 1) Upload your inputs (video, image, or audio) with [Generate Upload URLs](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls) and copy the `file_path`. 2) Send a request to create a video editor job with the basic fields. 3) Check the job status until it's `complete`, then download the result from `downloads`. **Key options** - Inputs: usually a file, sometimes a YouTube link, depending on project type - Resolution: free users are limited to 576px; higher plans unlock HD and larger sizes - Extra fields: e.g. `face_swap_mode`, `start_seconds`/`end_seconds`, or a text prompt **Cost** Credits are only charged for the frames that actually render. You'll see an estimate when the job is queued, and the final total after it's done. For detailed examples, see the [product page](https://magichour.ai/products/ai-video-editor).
Annotations the server declares
- title: AI Video Editor
- readOnlyHint: false
- destructiveHint: false
- openWorldHint: true
ai_video_translator_create_videoMCP guidance: - Starts an async video job; returns `id` and `credits_charged`.No findings
Why it is in this group
- The name "ai_video_translator_create_video" says "create": a word for a change.
Description, as the server wrote it MCP guidance: - Starts an async video job; returns `id` and `credits_charged`. For finished results, call `wait_for_video_project` with that id or poll `GET /v1/video-projects/{id}` until `complete`, `error`, or `canceled`. Results include `downloads`; wait helpers add `exact_download_urls`. Preserve signed URLs and query parameters; never append expiration metadata. - For `*_file_path`, use an existing Magic Hour path or the upload-URL endpoint's `file_path` after uploading raw bytes to its presigned URL. Direct public media URLs may work if stable and fetchable as raw bytes; hotlinked URLs can fail. Prefer the upload-URL endpoint when unsure. **What this API does** Create the same Video Translator you can make in the browser, but programmatically, so you can automate it, run it at scale, or connect it to your own app or workflow. **Good for** - Automation and batch processing - Adding video translator into apps, pipelines, or tools **How it works (3 steps)** 1) Upload your inputs (video, image, or audio) with [Generate Upload URLs](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls) and copy the `file_path`. 2) Send a request to create a video translator job with the basic fields. 3) Check the job status until it's `complete`, then download the result from `downloads`. **Key options** - Inputs: usually a file, sometimes a YouTube link, depending on project type - Resolution: free users are limited to 576px; higher plans unlock HD and larger sizes - Extra fields: e.g. `face_swap_mode`, `start_seconds`/`end_seconds`, or a text prompt **Cost** Credits are only charged for the frames that actually render. You'll see an estimate when the job is queued, and the final total after it's done. For detailed examples, see the [product page](https://magichour.ai/products/ai-video-translator).
Annotations the server declares
- title: AI Video Translator
- readOnlyHint: false
- destructiveHint: false
- openWorldHint: true
animation_create_videoMCP guidance: - Starts an async video job; returns `id` and `credits_charged`.No findings
Why it is in this group
- The name "animation_create_video" says "create": a word for a change.
Description, as the server wrote it MCP guidance: - Starts an async video job; returns `id` and `credits_charged`. For finished results, call `wait_for_video_project` with that id or poll `GET /v1/video-projects/{id}` until `complete`, `error`, or `canceled`. Results include `downloads`; wait helpers add `exact_download_urls`. Preserve signed URLs and query parameters; never append expiration metadata. - For `*_file_path`, use an existing Magic Hour path or the upload-URL endpoint's `file_path` after uploading raw bytes to its presigned URL. Direct public media URLs may work if stable and fetchable as raw bytes; hotlinked URLs can fail. Prefer the upload-URL endpoint when unsure. Create a Animation video. The estimated frame cost is calculated based on the `fps` and `end_seconds` input.
Annotations the server declares
- title: Animation
- readOnlyHint: false
- destructiveHint: false
- openWorldHint: true
audio_to_video_create_videoMCP guidance: - Starts an async video job; returns `id` and `credits_charged`.No findings
Why it is in this group
- The name "audio_to_video_create_video" says "create": a word for a change.
Description, as the server wrote it MCP guidance: - Starts an async video job; returns `id` and `credits_charged`. For finished results, call `wait_for_video_project` with that id or poll `GET /v1/video-projects/{id}` until `complete`, `error`, or `canceled`. Results include `downloads`; wait helpers add `exact_download_urls`. Preserve signed URLs and query parameters; never append expiration metadata. - For `*_file_path`, use an existing Magic Hour path or the upload-URL endpoint's `file_path` after uploading raw bytes to its presigned URL. Direct public media URLs may work if stable and fetchable as raw bytes; hotlinked URLs can fail. Prefer the upload-URL endpoint when unsure. **What this API does** Create the same Audio To Video you can make in the browser, but programmatically, so you can automate it, run it at scale, or connect it to your own app or workflow. **Good for** - Automation and batch processing - Adding audio to video into apps, pipelines, or tools **How it works (3 steps)** 1) Upload your inputs (video, image, or audio) with [Generate Upload URLs](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls) and copy the `file_path`. 2) Send a request to create a audio to video job with the basic fields. 3) Check the job status until it's `complete`, then download the result from `downloads`. **Key options** - Inputs: usually a file, sometimes a YouTube link, depending on project type - Resolution: free users are limited to 576px; higher plans unlock HD and larger sizes - Extra fields: e.g. `face_swap_mode`, `start_seconds`/`end_seconds`, or a text prompt **Cost** Credits are only charged for the frames that actually render. You'll see an estimate when the job is queued, and the final total after it's done. For detailed examples, see the [product page](https://magichour.ai/products/audio-to-video).
Annotations the server declares
- title: Audio-to-Video
- readOnlyHint: false
- destructiveHint: false
- openWorldHint: true
auto_subtitle_generator_create_videoMCP guidance: - Starts an async video job; returns `id` and `credits_charged`.No findings
Why it is in this group
- The name "auto_subtitle_generator_create_video" says "create": a word for a change.
Description, as the server wrote it MCP guidance: - Starts an async video job; returns `id` and `credits_charged`. For finished results, call `wait_for_video_project` with that id or poll `GET /v1/video-projects/{id}` until `complete`, `error`, or `canceled`. Results include `downloads`; wait helpers add `exact_download_urls`. Preserve signed URLs and query parameters; never append expiration metadata. - For `*_file_path`, use an existing Magic Hour path or the upload-URL endpoint's `file_path` after uploading raw bytes to its presigned URL. Direct public media URLs may work if stable and fetchable as raw bytes; hotlinked URLs can fail. Prefer the upload-URL endpoint when unsure. Automatically generate subtitles for your video in multiple languages.
Annotations the server declares
- title: Auto Subtitle Generator
- readOnlyHint: false
- destructiveHint: false
- openWorldHint: true
body_swap_create_imageUse only with the user's own likeness or content they are authorized to use.No findings
Why it is in this group
- The name "body_swap_create_image" says "create": a word for a change.
Description, as the server wrote it Use only with the user's own likeness or content they are authorized to use. Do not use for impersonation, deception, sexual content, or content involving minors. MCP guidance: - Starts an async image job; returns `id` and `credits_charged`. For finished results, call `wait_for_image_project` with that id or poll `GET /v1/image-projects/{id}` until `complete`, `error`, or `canceled`. Results include `downloads`; wait helpers add `exact_download_urls`. Preserve signed URLs and query parameters; never append expiration metadata. - For `*_file_path`, use an existing Magic Hour path or the upload-URL endpoint's `file_path` after uploading raw bytes to its presigned URL. Direct public media URLs may work if stable and fetchable as raw bytes; hotlinked URLs can fail. Prefer the upload-URL endpoint when unsure. Swap a person into a scene image using Nano Banana 2 Lite (640px/1k) or Nano Banana 2 (2k/4k). Credits depend on `resolution` (from 50 credits at 640px upward).
Annotations the server declares
- title: Body Swap
- readOnlyHint: false
- destructiveHint: false
- openWorldHint: true
character_replace_create_videoUse only with the user's own likeness or content they are authorized to use.1 finding
Why it is in this group
- The name "character_replace_create_video" says "replace": a word for a change.
Findings
- Info
The description is 2,026 characters long, over the 2,000 this check looks for.
What this check looks forMatched text
description ends: "...xamples, see the [product page](https://magichour.ai/products/character-replace)."
Description, as the server wrote it Use only with the user's own likeness or content they are authorized to use. Do not use for impersonation, deception, sexual content, or content involving minors. MCP guidance: - Starts an async video job; returns `id` and `credits_charged`. For finished results, call `wait_for_video_project` with that id or poll `GET /v1/video-projects/{id}` until `complete`, `error`, or `canceled`. Results include `downloads`; wait helpers add `exact_download_urls`. Preserve signed URLs and query parameters; never append expiration metadata. - For `*_file_path`, use an existing Magic Hour path or the upload-URL endpoint's `file_path` after uploading raw bytes to its presigned URL. Direct public media URLs may work if stable and fetchable as raw bytes; hotlinked URLs can fail. Prefer the upload-URL endpoint when unsure. **What this API does** Create the same Character Replace you can make in the browser, but programmatically, so you can automate it, run it at scale, or connect it to your own app or workflow. **Good for** - Automation and batch processing - Adding character replace into apps, pipelines, or tools **How it works (3 steps)** 1) Upload your inputs (video, image, or audio) with [Generate Upload URLs](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls) and copy the `file_path`. 2) Send a request to create a character replace job with the basic fields. 3) Check the job status until it's `complete`, then download the result from `downloads`. **Key options** - Inputs: usually a file, sometimes a YouTube link, depending on project type - Resolution: free users are limited to 576px; higher plans unlock HD and larger sizes - Extra fields: e.g. `face_swap_mode`, `start_seconds`/`end_seconds`, or a text prompt **Cost** Credits are only charged for the frames that actually render. You'll see an estimate when the job is queued, and the final total after it's done. For detailed examples, see the [product page](https://magichour.ai/products/character-replace).
Annotations the server declares
- title: Character Replace
- readOnlyHint: false
- destructiveHint: false
- openWorldHint: true
face_detection_detect_facesMCP guidance: - This starts an async face-detection task and returns an `id`.No findings
Why it is in this group
- Nothing in its name or description says what it does, so it is counted as a write.
Description, as the server wrote it MCP guidance: - This starts an async face-detection task and returns an `id`. Use the face-detection details endpoint with that id to retrieve detected faces before doing individual face swaps. - For `*_file_path`, use an existing Magic Hour path or the upload-URL endpoint's `file_path` after uploading raw bytes to its presigned URL. Direct public media URLs may work if stable and fetchable as raw bytes; hotlinked URLs can fail. Prefer the upload-URL endpoint when unsure. Detect faces in an image or video. Use this API to get the list of faces detected in the image or video to use in the [face swap photo](https://docs.magichour.ai/api-reference/image-projects/face-swap-photo) or [face swap video](https://docs.magichour.ai/api-reference/video-projects/face-swap-video) API calls for multi-face swaps. Note: Face detection is free to use for the near future. Pricing may change in the future.
Annotations the server declares
- title: Face Detection
- readOnlyHint: false
- destructiveHint: false
- openWorldHint: true
face_swap_create_videoUse only with the user's own likeness or content they are authorized to use.No findings
Why it is in this group
- The name "face_swap_create_video" says "create": a word for a change.
Description, as the server wrote it Use only with the user's own likeness or content they are authorized to use. Do not use for impersonation, deception, sexual content, or content involving minors. MCP guidance: - Starts an async video job; returns `id` and `credits_charged`. For finished results, call `wait_for_video_project` with that id or poll `GET /v1/video-projects/{id}` until `complete`, `error`, or `canceled`. Results include `downloads`; wait helpers add `exact_download_urls`. Preserve signed URLs and query parameters; never append expiration metadata. - For `*_file_path`, use an existing Magic Hour path or the upload-URL endpoint's `file_path` after uploading raw bytes to its presigned URL. Direct public media URLs may work if stable and fetchable as raw bytes; hotlinked URLs can fail. Prefer the upload-URL endpoint when unsure. **What this API does** Create the same Face Swap you can make in the browser, but programmatically, so you can automate it, run it at scale, or connect it to your own app or workflow. **Good for** - Automation and batch processing - Adding face swap into apps, pipelines, or tools **How it works (3 steps)** 1) Upload your inputs (video, image, or audio) with [Generate Upload URLs](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls) and copy the `file_path`. 2) Send a request to create a face swap job with the basic fields. 3) Check the job status until it's `complete`, then download the result from `downloads`. **Key options** - Inputs: usually a file, sometimes a YouTube link, depending on project type - Resolution: free users are limited to 576px; higher plans unlock HD and larger sizes - Extra fields: e.g. `face_swap_mode`, `start_seconds`/`end_seconds`, or a text prompt **Cost** Credits are only charged for the frames that actually render. You'll see an estimate when the job is queued, and the final total after it's done. For detailed examples, see the [product page](https://magichour.ai/products/face-swap).
Annotations the server declares
- title: Face Swap Video
- readOnlyHint: false
- destructiveHint: false
- openWorldHint: true
face_swap_photo_create_imageUse only with the user's own likeness or content they are authorized to use.No findings
Why it is in this group
- The name "face_swap_photo_create_image" says "create": a word for a change.
Description, as the server wrote it Use only with the user's own likeness or content they are authorized to use. Do not use for impersonation, deception, sexual content, or content involving minors. MCP guidance: - Starts an async image job; returns `id` and `credits_charged`. For finished results, call `wait_for_image_project` with that id or poll `GET /v1/image-projects/{id}` until `complete`, `error`, or `canceled`. Results include `downloads`; wait helpers add `exact_download_urls`. Preserve signed URLs and query parameters; never append expiration metadata. - For `*_file_path`, use an existing Magic Hour path or the upload-URL endpoint's `file_path` after uploading raw bytes to its presigned URL. Direct public media URLs may work if stable and fetchable as raw bytes; hotlinked URLs can fail. Prefer the upload-URL endpoint when unsure. Create a face swap photo. Each photo costs 10 credits. The height/width of the output image depends on your subscription. Please refer to our [pricing](https://magichour.ai/pricing) page for more details
Annotations the server declares
- title: Face Swap Photo
- readOnlyHint: false
- destructiveHint: false
- openWorldHint: true
head_swap_create_imageUse only with the user's own likeness or content they are authorized to use.No findings
Why it is in this group
- The name "head_swap_create_image" says "create": a word for a change.
Description, as the server wrote it Use only with the user's own likeness or content they are authorized to use. Do not use for impersonation, deception, sexual content, or content involving minors. MCP guidance: - Starts an async image job; returns `id` and `credits_charged`. For finished results, call `wait_for_image_project` with that id or poll `GET /v1/image-projects/{id}` until `complete`, `error`, or `canceled`. Results include `downloads`; wait helpers add `exact_download_urls`. Preserve signed URLs and query parameters; never append expiration metadata. - For `*_file_path`, use an existing Magic Hour path or the upload-URL endpoint's `file_path` after uploading raw bytes to its presigned URL. Direct public media URLs may work if stable and fetchable as raw bytes; hotlinked URLs can fail. Prefer the upload-URL endpoint when unsure. Swap a head onto a body image. Each image costs 10 credits. Output resolution depends on your subscription; you may set `max_resolution` lower than your plan maximum if desired.
Annotations the server declares
- title: Head Swap
- readOnlyHint: false
- destructiveHint: false
- openWorldHint: true
image_background_remover_create_imageMCP guidance: - Starts an async image job; returns `id` and `credits_charged`.No findings
Why it is in this group
- The name "image_background_remover_create_image" says "create": a word for a change.
Description, as the server wrote it MCP guidance: - Starts an async image job; returns `id` and `credits_charged`. For finished results, call `wait_for_image_project` with that id or poll `GET /v1/image-projects/{id}` until `complete`, `error`, or `canceled`. Results include `downloads`; wait helpers add `exact_download_urls`. Preserve signed URLs and query parameters; never append expiration metadata. - For `*_file_path`, use an existing Magic Hour path or the upload-URL endpoint's `file_path` after uploading raw bytes to its presigned URL. Direct public media URLs may work if stable and fetchable as raw bytes; hotlinked URLs can fail. Prefer the upload-URL endpoint when unsure. Remove background from image. Each image costs 5 credits.
Annotations the server declares
- title: Image Background Remover
- readOnlyHint: false
- destructiveHint: false
- openWorldHint: true
image_to_video_create_videoMCP guidance: - Starts an async video job; returns `id` and `credits_charged`.No findings
Why it is in this group
- The name "image_to_video_create_video" says "create": a word for a change.
Description, as the server wrote it MCP guidance: - Starts an async video job; returns `id` and `credits_charged`. For finished results, call `wait_for_video_project` with that id or poll `GET /v1/video-projects/{id}` until `complete`, `error`, or `canceled`. Results include `downloads`; wait helpers add `exact_download_urls`. Preserve signed URLs and query parameters; never append expiration metadata. - For `*_file_path`, use an existing Magic Hour path or the upload-URL endpoint's `file_path` after uploading raw bytes to its presigned URL. Direct public media URLs may work if stable and fetchable as raw bytes; hotlinked URLs can fail. Prefer the upload-URL endpoint when unsure. Animate a supplied product photo, portrait or scene. Requires `assets.image_file_path` and `end_seconds`. Use the approved image directly; edit only for a requested visual change or a source problem that prevents the shot. Prompt for motion while preserving the supplied appearance. Model, duration, resolution and audio support vary. Generation consumes credits; the queued video charge is an estimate, with the final charge available on the completed project.
Annotations the server declares
- title: Animate a supplied image into video
- readOnlyHint: false
- destructiveHint: false
- openWorldHint: true
lip_sync_create_videoUse only with the user's own likeness or content they are authorized to use.No findings
Why it is in this group
- The name "lip_sync_create_video" says "sync": a word for a change.
Description, as the server wrote it Use only with the user's own likeness or content they are authorized to use. Do not use for impersonation, deception, sexual content, or content involving minors. MCP guidance: - Starts an async video job; returns `id` and `credits_charged`. For finished results, call `wait_for_video_project` with that id or poll `GET /v1/video-projects/{id}` until `complete`, `error`, or `canceled`. Results include `downloads`; wait helpers add `exact_download_urls`. Preserve signed URLs and query parameters; never append expiration metadata. - For `*_file_path`, use an existing Magic Hour path or the upload-URL endpoint's `file_path` after uploading raw bytes to its presigned URL. Direct public media URLs may work if stable and fetchable as raw bytes; hotlinked URLs can fail. Prefer the upload-URL endpoint when unsure. Match existing video to replacement audio. Requires `assets.audio_file_path`, `assets.video_source` and its matching `assets.video_file_path` or `assets.youtube_url`, plus `start_seconds` and `end_seconds`. For a still portrait plus audio, use `ai_talking_photo_create_talking_photo`. Text alone is not an audio input. Generation consumes credits; the queued video charge is an estimate, with the final charge available on the completed project.
Annotations the server declares
- title: Lip-sync existing video to replacement audio
- readOnlyHint: false
- destructiveHint: false
- openWorldHint: true
photo_colorizer_create_imageMCP guidance: - Starts an async image job; returns `id` and `credits_charged`.No findings
Why it is in this group
- The name "photo_colorizer_create_image" says "create": a word for a change.
Description, as the server wrote it MCP guidance: - Starts an async image job; returns `id` and `credits_charged`. For finished results, call `wait_for_image_project` with that id or poll `GET /v1/image-projects/{id}` until `complete`, `error`, or `canceled`. Results include `downloads`; wait helpers add `exact_download_urls`. Preserve signed URLs and query parameters; never append expiration metadata. - For `*_file_path`, use an existing Magic Hour path or the upload-URL endpoint's `file_path` after uploading raw bytes to its presigned URL. Direct public media URLs may work if stable and fetchable as raw bytes; hotlinked URLs can fail. Prefer the upload-URL endpoint when unsure. Colorize image. Each image costs 10 credits.
Annotations the server declares
- title: Photo Colorizer
- readOnlyHint: false
- destructiveHint: false
- openWorldHint: true
text_to_video_create_videoMCP guidance: - Starts an async video job; returns `id` and `credits_charged`.No findings
Why it is in this group
- The name "text_to_video_create_video" says "create": a word for a change.
Description, as the server wrote it MCP guidance: - Starts an async video job; returns `id` and `credits_charged`. For finished results, call `wait_for_video_project` with that id or poll `GET /v1/video-projects/{id}` until `complete`, `error`, or `canceled`. Results include `downloads`; wait helpers add `exact_download_urls`. Preserve signed URLs and query parameters; never append expiration metadata. Generate a new scene from `style.prompt` and `end_seconds` when no supplied starting image is required. To animate an approved product photo or portrait, use `image_to_video_create_video` instead.
Annotations the server declares
- title: Generate video from text
- readOnlyHint: false
- destructiveHint: false
- openWorldHint: false
video_assets_generate_presigned_urlMCP guidance: - This only creates presigned upload URLs.No findings
Why it is in this group
- The name "video_assets_generate_presigned_url" says "generate": a word for a change.
Description, as the server wrote it MCP guidance: - This only creates presigned upload URLs. For local files, upload the raw bytes to each returned `upload_url` outside the generation call, then pass the matching `file_path` into the create tool. - For `*_file_path`, use an existing Magic Hour path or the upload-URL endpoint's `file_path` after uploading raw bytes to its presigned URL. Direct public media URLs may work if stable and fetchable as raw bytes; hotlinked URLs can fail. Prefer the upload-URL endpoint when unsure. Generates a list of pre-signed upload URLs for the assets required. This API is only necessary if you want to upload to Magic Hour's storage. Refer to the [Input Files Guide](https://docs.magichour.ai/integration/inputs-and-outputs) for more details. The response array will match the order of items in the request body. **Valid file extensions per asset type**: - video: mp4, m4v, mov, webm - audio: mp3, wav, aac, flac, webm, weba, m4a, opus, ogg, oga, aiff, amr - image: png, jpg, jpeg, jfif, heic, heif, webp, avif, jp2, tiff, tif, bmp - gif: gif, webp, webm > Note: `gif` is only supported for face swap API `video_file_path` field. Once you receive an upload URL, send a `PUT` request to upload the file directly. Example: ``` curl -X PUT --data '@/path/to/file/video.mp4' \ https://videos.magichour.ai/api-assets/id/video.mp4?<auth params from the API response> ```
Annotations the server declares
- title: Generate asset upload urls
- readOnlyHint: false
- destructiveHint: false
- openWorldHint: false
video_to_video_create_videoMCP guidance: - Starts an async video job; returns `id` and `credits_charged`.No findings
Why it is in this group
- The name "video_to_video_create_video" says "create": a word for a change.
Description, as the server wrote it MCP guidance: - Starts an async video job; returns `id` and `credits_charged`. For finished results, call `wait_for_video_project` with that id or poll `GET /v1/video-projects/{id}` until `complete`, `error`, or `canceled`. Results include `downloads`; wait helpers add `exact_download_urls`. Preserve signed URLs and query parameters; never append expiration metadata. - For `*_file_path`, use an existing Magic Hour path or the upload-URL endpoint's `file_path` after uploading raw bytes to its presigned URL. Direct public media URLs may work if stable and fetchable as raw bytes; hotlinked URLs can fail. Prefer the upload-URL endpoint when unsure. **What this API does** Create the same Video To Video you can make in the browser, but programmatically, so you can automate it, run it at scale, or connect it to your own app or workflow. **Good for** - Automation and batch processing - Adding video to video into apps, pipelines, or tools **How it works (3 steps)** 1) Upload your inputs (video, image, or audio) with [Generate Upload URLs](https://docs.magichour.ai/api-reference/files/generate-asset-upload-urls) and copy the `file_path`. 2) Send a request to create a video to video job with the basic fields. 3) Check the job status until it's `complete`, then download the result from `downloads`. **Key options** - Inputs: usually a file, sometimes a YouTube link, depending on project type - Resolution: free users are limited to 576px; higher plans unlock HD and larger sizes - Extra fields: e.g. `face_swap_mode`, `start_seconds`/`end_seconds`, or a text prompt **Cost** Credits are only charged for the frames that actually render. You'll see an estimate when the job is queued, and the final total after it's done. For detailed examples, see the [product page](https://magichour.ai/products/video-to-video).
Annotations the server declares
- title: Video-to-Video
- readOnlyHint: false
- destructiveHint: false
- openWorldHint: true
Only reads 14Claude Code: allow
account_retrieveGet the current credit balance and subscription details of the account that owns the API key.No findings
Why it is in this group
- The name "account_retrieve" says "retrieve": a word for reading.
Description, as the server wrote it Get the current credit balance and subscription details of the account that owns the API key.
Annotations the server declares
- title: Get account details
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
audio_projects_retrieve_detailsMCP guidance: - Use this after a create tool to poll job status.No findings
Why it is in this group
- The name "audio_projects_retrieve_details" says "retrieve": a word for reading.
Description, as the server wrote it MCP guidance: - Use this after a create tool to poll job status. When status is `complete`, surface the `downloads` URLs to the user; if status is `error`, surface the error message. - Each `downloads[n].url` is already the full signed download URL. Use it exactly as returned. Do not shorten it, strip query parameters, or append `expires_at` onto the URL string. Check the progress of a audio project. The `downloads` field is populated after a successful render. **Statuses** - `queued` — waiting to start - `rendering` — in progress - `complete` — ready; see `downloads` - `error` — a failure occurred (see `error`) - `canceled` — user canceled - `draft` — not used
Annotations the server declares
- title: Get audio details
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
face_detection_retrieve_detailsGet the details of a face detection task.No findings
Why it is in this group
- The name "face_detection_retrieve_details" says "retrieve": a word for reading.
Description, as the server wrote it Get the details of a face detection task. Use this API to get the list of faces detected in the image or video to use in the [face swap photo](https://docs.magichour.ai/api-reference/image-projects/face-swap-photo) or [face swap video](https://docs.magichour.ai/api-reference/video-projects/face-swap-video) API calls for multi-face swaps.
Annotations the server declares
- title: Get face detection details
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
fetch_audio_downloadFetch a audio `downloads[n].url` from a completed audio project and return it as inline MCP audio content for compatible clients.No findings
Why it is in this group
- The name "fetch_audio_download" says "fetch": a word for reading.
Description, as the server wrote it Fetch a audio `downloads[n].url` from a completed audio project and return it as inline MCP audio content for compatible clients. Pass the exact full signed URL from `downloads[n].url` without trimming query parameters; `expires_at` is separate metadata, not part of the URL. Inline media is capped at 8 MiB; use the signed URL directly for larger downloads.
Annotations the server declares
- title: Fetch Audio Download
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
fetch_image_downloadFetch a image `downloads[n].url` from a completed image project and return it as inline MCP image content for compatible clients.No findings
Why it is in this group
- The name "fetch_image_download" says "fetch": a word for reading.
Description, as the server wrote it Fetch a image `downloads[n].url` from a completed image project and return it as inline MCP image content for compatible clients. Pass the exact full signed URL from `downloads[n].url` without trimming query parameters; `expires_at` is separate metadata, not part of the URL. Inline media is capped at 8 MiB; use the signed URL directly for larger downloads.
Annotations the server declares
- title: Fetch Image Download
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
fetch_video_downloadFetch a video `downloads[n].url` from a completed video project and return it as an embedded MCP binary resource for compatible clients.No findings
Why it is in this group
- The name "fetch_video_download" says "fetch": a word for reading.
Description, as the server wrote it Fetch a video `downloads[n].url` from a completed video project and return it as an embedded MCP binary resource for compatible clients. Pass the exact full signed URL from `downloads[n].url` without trimming query parameters; `expires_at` is separate metadata, not part of the URL. Inline media is capped at 8 MiB; use the signed URL directly for larger downloads.
Annotations the server declares
- title: Fetch Video Download
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
image_projects_retrieve_detailsMCP guidance: - Use this after a create tool to poll job status.No findings
Why it is in this group
- The name "image_projects_retrieve_details" says "retrieve": a word for reading.
Description, as the server wrote it MCP guidance: - Use this after a create tool to poll job status. When status is `complete`, surface the `downloads` URLs to the user; if status is `error`, surface the error message. - Each `downloads[n].url` is already the full signed download URL. Use it exactly as returned. Do not shorten it, strip query parameters, or append `expires_at` onto the URL string. Check the progress of a image project. The `downloads` field is populated after a successful render. **Statuses** - `queued` — waiting to start - `rendering` — in progress - `complete` — ready; see `downloads` - `error` — a failure occurred (see `error`) - `canceled` — user canceled - `draft` — not used
Annotations the server declares
- title: Get image details
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
pingCheck that the Magic Hour MCP server is reachable.No findings
Why it is in this group
- The name "ping" says "ping": a word for reading.
Description, as the server wrote it Check that the Magic Hour MCP server is reachable.
Annotations the server declares
- title: Ping
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
saved_items_listReturns active saved items owned by the authenticated account, newest first.No findings
Why it is in this group
- The name "saved_items_list" says "list": a word for reading.
Description, as the server wrote it Returns active saved items owned by the authenticated account, newest first. Each item includes every saved asset with a durable file_path for reuse in compatible generation APIs and a temporary signed URL for previewing or downloading. Filter by type to find characters, references, voices, moodboards, or brand kits. To fetch the next page, pass the response's next_cursor as cursor.
Annotations the server declares
- title: List saved items
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
video_projects_retrieve_detailsMCP guidance: - Use this after a create tool to poll job status.No findings
Why it is in this group
- The name "video_projects_retrieve_details" says "retrieve": a word for reading.
Description, as the server wrote it MCP guidance: - Use this after a create tool to poll job status. When status is `complete`, surface the `downloads` URLs to the user; if status is `error`, surface the error message. - Each `downloads[n].url` is already the full signed download URL. Use it exactly as returned. Do not shorten it, strip query parameters, or append `expires_at` onto the URL string. Check the progress of a video project. The `downloads` field is populated after a successful render. **Statuses** - `queued` — waiting to start - `rendering` — in progress - `complete` — ready; see `downloads` - `error` — a failure occurred (see `error`) - `canceled` — user canceled - `draft` — not used
Annotations the server declares
- title: Get video details
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
wait_for_audio_projectPoll an audio project until it completes, errors, is canceled, or times out.No findings
Why it is in this group
- The name "wait_for_audio_project" says "wait": a word for reading.
Description, as the server wrote it Poll an audio project until it completes, errors, is canceled, or times out. After a timeout, resume with the same id; do not create another generation. Returns the final project JSON and, when complete, attempts to inline audio downloads for Inspector or compatible clients. Returns sanitized download fields. Use `exact_download_urls[n]` or `downloads[n].url` exactly as returned; do not shorten it, remove query parameters, or append expiration metadata. Inline previews share an 8 MiB limit; all download URLs remain available.
Annotations the server declares
- title: Wait for Audio Project
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
wait_for_image_projectPoll an image project until it completes, errors, is canceled, or times out.No findings
Why it is in this group
- The name "wait_for_image_project" says "wait": a word for reading.
Description, as the server wrote it Poll an image project until it completes, errors, is canceled, or times out. After a timeout, resume with the same id; do not create another generation. Returns the final project JSON and, when complete, attempts to inline image downloads for Inspector or compatible clients. Returns sanitized download fields. Use `exact_download_urls[n]` or `downloads[n].url` exactly as returned; do not shorten it, remove query parameters, or append expiration metadata. Inline previews share an 8 MiB limit; all download URLs remain available.
Annotations the server declares
- title: Wait for Image Project
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
wait_for_video_projectPoll a video project until it completes, errors, is canceled, or times out.No findings
Why it is in this group
- The name "wait_for_video_project" says "wait": a word for reading.
Description, as the server wrote it Poll a video project until it completes, errors, is canceled, or times out. After a timeout, resume with the same id; do not create another generation. Returns sanitized download fields. Use `exact_download_urls[n]` or `downloads[n].url` exactly as returned; do not shorten it, remove query parameters, or append expiration metadata. Inline previews share an 8 MiB limit; all download URLs remain available.
Annotations the server declares
- title: Wait for Video Project
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
workflow_guide_retrieveRead Magic Hour workflow guidance for face swap, image editing, image-to-video, video generation, lip sync, UGC ads, talking photos or API integration.No findings
Why it is in this group
- The name "workflow_guide_retrieve" says "retrieve": a word for reading.
Description, as the server wrote it Read Magic Hour workflow guidance for face swap, image editing, image-to-video, video generation, lip sync, UGC ads, talking photos or API integration. Returns product and documentation URLs, exact tool names, ordered steps, example requests, follow-up edits and review criteria; does not generate media, spend credits or check account access.
Annotations the server declares
- readOnlyHint: true
- destructiveHint: false
- openWorldHint: false
This is not a safety rating, and no finding is not a safety guarantee. The groups and findings come from fixed checks of the tool definitions the server returned on the date shown, not from its code or what it does when called. How the checks work.
Install
Pinned to version 0.1.0. Values in angle brackets are yours to fill in.
claude mcp add --transport http magic-hour https://mcp.magichour.ai/Run in a terminal.
Claude Code permissions
Allow the reads, ask before a change, deny the deletes. Paste into .claude/settings.json.
{
"permissions": {
"allow": [
"mcp__magic-hour__workflow_guide_retrieve",
"mcp__magic-hour__ping",
"mcp__magic-hour__wait_for_video_project",
"mcp__magic-hour__wait_for_image_project",
"mcp__magic-hour__wait_for_audio_project",
"mcp__magic-hour__fetch_image_download",
"mcp__magic-hour__fetch_audio_download",
"mcp__magic-hour__fetch_video_download",
"mcp__magic-hour__account_retrieve",
"mcp__magic-hour__saved_items_list",
"mcp__magic-hour__face_detection_retrieve_details",
"mcp__magic-hour__video_projects_retrieve_details",
"mcp__magic-hour__image_projects_retrieve_details",
"mcp__magic-hour__audio_projects_retrieve_details"
],
"ask": [
"mcp__magic-hour__video_assets_generate_presigned_url",
"mcp__magic-hour__face_detection_detect_faces",
"mcp__magic-hour__ai_talking_photo_create_talking_photo",
"mcp__magic-hour__ai_ugc_ad_create_video",
"mcp__magic-hour__ai_video_editor_create_video",
"mcp__magic-hour__ai_video_translator_create_video",
"mcp__magic-hour__animation_create_video",
"mcp__magic-hour__audio_to_video_create_video",
"mcp__magic-hour__auto_subtitle_generator_create_video",
"mcp__magic-hour__character_replace_create_video",
"mcp__magic-hour__face_swap_create_video",
"mcp__magic-hour__image_to_video_create_video",
"mcp__magic-hour__lip_sync_create_video",
"mcp__magic-hour__text_to_video_create_video",
"mcp__magic-hour__video_to_video_create_video",
"mcp__magic-hour__ai_clothes_changer_create_image",
"mcp__magic-hour__ai_face_editor_edit_image",
"mcp__magic-hour__ai_gif_generator_create_image",
"mcp__magic-hour__ai_image_editor_create_image",
"mcp__magic-hour__ai_headshot_generator_create_image",
"mcp__magic-hour__ai_image_generator_create_image",
"mcp__magic-hour__ai_image_upscaler_create_image",
"mcp__magic-hour__ai_meme_generator_create_image",
"mcp__magic-hour__ai_qr_code_generator_create_image",
"mcp__magic-hour__body_swap_create_image",
"mcp__magic-hour__face_swap_photo_create_image",
"mcp__magic-hour__head_swap_create_image",
"mcp__magic-hour__image_background_remover_create_image",
"mcp__magic-hour__photo_colorizer_create_image"
],
"deny": [
"mcp__magic-hour__video_projects_delete",
"mcp__magic-hour__image_projects_delete",
"mcp__magic-hour__audio_projects_delete"
]
}
}Tools that only read are allowed, tools that change things ask first, tools that delete or cancel are denied. It assumes the server is installed as magic-hour. Review it before you use it.
