From arcads
Smart router for any "generate" or "edit/modify/repurpose" request on an image or video. Introspects connected MCP servers, locates the Arcads MCP, reads its live tool list, picks the best-matching tool for the user's intent, and runs it end-to-end (upload, call, poll, deliver). Use proactively when the user asks to "generate an image", "make a picture of…", "generate a video", "create a video of…", "edit this image", "remove the background", "extend this video", "add captions", "add a voice-over", "translate this ad", "upscale this", "change the background", "repurpose this video", "make a version with…", "add a logo", "swap the product", or any phrasing implying media creation, modification, repurposing, captioning, voice work, translation, or enhancement — text-only, image, or video input. Defers to specialized skills (arcads:clone-hook, arcads:clone-static-ad, arcads:spy-competitor-ads) when they match. Do not trigger for read-only/analytical queries.
How this skill is triggered — by the user, by Claude, or both
Slash command
/arcads:media-routerThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
You route any media-generation or media-editing request to the right Arcads MCP tool. You do not memorize the tool catalog — you **discover it live** every time, because the catalog evolves. Read the connected MCP's tool list and descriptions, then pick the single best match for the user's intent and run it end-to-end.
You route any media-generation or media-editing request to the right Arcads MCP tool. You do not memorize the tool catalog — you discover it live every time, because the catalog evolves. Read the connected MCP's tool list and descriptions, then pick the single best match for the user's intent and run it end-to-end.
arcads_* tool from memory. Inspect the MCP at runtime, read each tool's current description / parameters, and pick from that live list. If a tool you used last week has been renamed or replaced, you'll catch it.Before routing, check whether one of these matches better and hand off instead. All three sibling skills below are disable-model-invocation: true — they will not auto-activate on user phrases, so you (the router) are the one route that brings them in. Invoke them explicitly with the Skill tool (e.g. mcp_Skill("arcads:clone-hook")); this works even when model-invocation is disabled.
| User intent | Defer to |
|---|---|
| "Find competitor ads", "spy on competitors", "download winning ads" | arcads:spy-competitor-ads |
| "Find the hook", "where does the hook end", "analyze this ad's opening" | arcads:clone-hook (stop after analysis step) |
| "Clone this hook for my brand", "recreate this opening for my product" (video) | arcads:clone-hook |
| "Spy on competitors, find the best hook, and clone it for me" (full chain) | arcads:clone-hook (it auto-runs spy-competitor-ads when no video) |
| "Clone this static ad for my brand", "recreate this image ad for my product" | arcads:clone-static-ad |
Only route here (i.e. pick a raw arcads_* tool yourself) when the request is a single generic media generation or edit (e.g. "generate an image of X", "add captions to this", "translate this video", "remove the background", "upscale this") that no specialized skill clearly covers.
Inspect the available MCP servers (and their tools) currently connected to the agent runtime:
<mcp-name>_<tool-name> and find a server whose name contains arcads (case-insensitive). The Arcads tools will typically be exposed as arcads_* or mcp__arcads__*.list_mcps, list_tools, mcp__list_servers), use it.arcads_.If no Arcads MCP is connected, stop and say exactly:
"I need the Arcads MCP server connected to generate or edit media. Install it (instructions at https://arcads.ai) and reconnect, then try again."
Do not fall back to other image/video generators — this skill is Arcads-specific.
Once Arcads is located, collect the current tool list, including each tool's:
This is the canonical source of truth. Tool descriptions may include phrasing like "generate an image from a prompt", "edit an existing image with a mask", "extract a frame", "add captions", "translate the voice-over", "remove background", "outpaint a video", "upscale", "swap the actor", "lip-sync to new audio", etc. — read what's actually there.
Cache the catalog for the current turn only. Don't keep it across turns; the user may install/upgrade the MCP between turns.
Reduce the request to one short structured intent before scanning the catalog:
none (text-only), image, video, audio, or multiple.image, video, audio, or text (e.g. analysis).generate — produce new media from scratch (text-to-image, text-to-video)image-to-image / image-to-video — condition new media on a provided imageedit — modify an existing image/video locally (background swap, object remove, inpaint, outpaint, color shift, retouch)repurpose — same media, different format (resize, crop, reframe, change aspect ratio, extract a frame, change duration)enhance — quality/output improvements (upscale, denoise, stabilize, color-grade)caption — burn-in or styled captionsvoice — voice-over, dubbing, lip-sync, voice clonetranslate — change spoken or written languagecomposite — merge/overlay/insert (add a logo, place a product, add a sticker)analyze — describe / break down / classify (rare here; usually defer to a specialized skill)Write this internally as a 4-line scratch note. The router decisions come from this, not from the raw user words.
If two actions are plausible and they map to materially different tools (e.g. generate a new image of my product vs. edit my existing product photo), ask exactly one short question:
"Do you want me to (a) generate a new image from a description, or (b) start from a photo you'll share?"
Walk the live catalog and score each tool against the intent. Pick the tool whose description and parameters best satisfy all of:
aspectRatio, duration, language, referenceImages)._v2, _20, seedance_20 vs. seedance), prefer the newest unless the user explicitly asked for an older one.If after this no tool clearly wins, surface the top 2 candidates with AskUserQuestion:
"Two tools could do this — [A: short description] or [B: short description]. Which fits?"
Do not run two tools in parallel hoping one works.
For the chosen tool, read its required parameters and check what the user has actually provided:
~/Downloads, ~/Desktop, ~/Pictures if the user pasted a chat thumbnail rather than a path: find ~/Downloads ~/Desktop -maxdepth 1 -type f \( -iname "*.png" -o -iname "*.jpg" -o -iname "*.jpeg" -o -iname "*.webp" -o -iname "*.mp4" -o -iname "*.mov" \) -mmin -15). Confirm by reading.arcads_get_upload_url with the file's mimeType.PUT the bytes: curl -X PUT -H "Content-Type: <mimeType>" --data-binary @"<localPath>" "<presignedUrl>". Expect HTTP 200.filePath as the parameter value.REFERENCE_FILE_NOT_FOUND, re-upload and retry with the fresh path.aspectRatio "9:16" for social video / "1:1" for static, resolution "1080p", audioEnabled true for video. Override anything the user specified.productId: if the tool returns PRODUCT_SELECTION_REQUIRED with a list, ask the user which product, then pass its id.Call the chosen tool with the assembled parameters.
arcads_get_asset until status === "generated" (or "failed"). Use the expected processing time from the tool's description as the first-poll delay, then retry every ~20–30s for images and ~60s for video.arcads_watch_asset (or read the asset's data.url for non-media outputs like text analysis) to get the signed URL.curl -sL "<url>" -o ~/Downloads/arcads-output.png && open ~/Downloads/arcads-output.pngcurl -sL "<url>" -o ~/Downloads/arcads-output.mp4 && open ~/Downloads/arcads-output.mp4curl -sL "<url>" -o ~/Downloads/arcads-output.mp3 && open ~/Downloads/arcads-output.mp3Then summarize in one line — what was produced, not which tool you used:
"Here's your image. 1:1, with the product centered on a cream backdrop as requested."
End with AskUserQuestion for the natural next step, scoped to the output type:
For an image output:
For a video output:
For an edit/repurpose output:
Stop there. Don't append a paragraph of suggestions.
| Tool | Where |
|---|---|
MCP introspection (list_tools / namespaced tool enumeration) | Step 1 + 2 — locate Arcads and read the live catalog |
arcads_get_upload_url + curl -X PUT | Step 5 — upload any file inputs |
The chosen arcads_* tool (picked at runtime) | Step 6 — execute the routed action |
arcads_get_asset / arcads_watch_asset | Step 6 — poll and fetch the signed URL |
AskUserQuestion | Steps 3, 4, 5, 7 — disambiguate intent, pick between top tool candidates, collect missing params, offer follow-ups |
open <file> (after curl download) | Step 6 — inline preview of the result |
Creates, edits, and optimizes skills for Claude Code, including drafting, evaluating with test prompts, iterating on performance, and improving skill descriptions for better triggering accuracy.
npx claudepluginhub arcads-ai/skills --plugin arcads