{
  "name": "similarclip",
  "title": "SimilarClip",
  "description": "Generate narrated, illustrated videos from a topic or YouTube link, buy credit, and publish to YouTube.",
  "version": "1.0.0",
  "websiteUrl": "https://similarclip.com/agents",
  "documentation": "https://similarclip.com/llms-full.txt",
  "remotes": [
    {
      "type": "streamable-http",
      "url": "https://similarclip.com/mcp"
    }
  ],
  "authentication": {
    "type": "bearer",
    "header": "Authorization",
    "format": "Bearer sc_live_…",
    "obtain": "https://similarclip.com/app/settings?tab=api"
  },
  "tools": [
    {
      "name": "get_account",
      "title": "Get account",
      "description": "Who the API key belongs to, plan/subscription status, AI credit balance, connected YouTube channels and saved defaults (style, voice, description footer). Call this first to see what the account can do."
    },
    {
      "name": "get_options",
      "title": "List creative options",
      "description": "Every valid value for create_video and create_schedule: visual style presets (with their art direction), TTS providers and voices, narration vibes, speeds, duration limits and visibilities. Also returns this account's saved defaults."
    },
    {
      "name": "get_billing",
      "title": "Get billing",
      "description": "Credit balance (plan credit + credit packs), the current plan, the purchasable plans (monthly and annual), credit packs and the estimated cost per minute of video. Use it to work out whether a video is affordable before creating it."
    },
    {
      "name": "create_checkout",
      "title": "Start a purchase",
      "description": "Start a purchase for the account: a subscription plan (monthly or annual) or a one-time credit pack (needs an active plan). Returns a checkout_url that a HUMAN must open to pay (agents never handle card details). Share the link with your user, wait for them to confirm, then check get_billing."
    },
    {
      "name": "estimate_video_cost",
      "title": "Estimate video cost",
      "description": "Estimated USD cost of a video of the given length, compared with the current balance. Calibrated from this account's own recent videos when it has at least 3 (else the platform rate), and scaled by seconds_per_image and image_check, since images are most of the cost. Real billing is metered at exact AI cost; get_video.cost_breakdown shows where a finished video's money went."
    },
    {
      "name": "create_video",
      "title": "Create a video",
      "description": "Generate a narrated, fully illustrated video. Give EITHER `topic` (SimilarClip researches it, picks an angle and writes an original script) OR `youtube_url` (it reimagines that clip with a fresh script, new visuals and a new voice; the source needs captions). Generation is asynchronous and takes several minutes: poll get_video until status is \"completed\" or \"failed\". Set `publish` to upload to YouTube automatically when done."
    },
    {
      "name": "list_videos",
      "title": "List videos",
      "description": "The account's videos, newest first. Filter by status to find running or finished ones."
    },
    {
      "name": "get_video",
      "title": "Get a video",
      "description": "Full status of one video: progress, current pipeline step, errors (and whether they are resumable), the downloadable MP4 and thumbnail URLs once completed, generated YouTube SEO metadata, the latest YouTube publication, the resolved creative settings, and `render`: what the last render actually contained (motion, transition, caption style, pop-up word count, music, sound-effect count). Check `render` when a setting seems to have no effect."
    },
    {
      "name": "start_video",
      "title": "Start a draft video",
      "description": "Start generating a draft video (one created with start=false, or refused earlier for billing)."
    },
    {
      "name": "resume_video",
      "title": "Resume a video",
      "description": "Resume a paused video, or retry a failed one from the step it stopped at (when error.resumable is true)."
    },
    {
      "name": "pause_video",
      "title": "Pause a video",
      "description": "Pause a queued or processing video at the next step boundary. Resume later with resume_video."
    },
    {
      "name": "stop_video",
      "title": "Stop a video",
      "description": "Stop a running or paused video for good (it cannot be resumed afterwards)."
    },
    {
      "name": "delete_video",
      "title": "Delete a video",
      "description": "Permanently delete a video and its files. Running videos must be stopped first. Already-published YouTube uploads are not touched."
    },
    {
      "name": "publish_video",
      "title": "Publish to YouTube",
      "description": "Upload a completed video to one of the account's connected YouTube channels, with the generated thumbnail. Title/description/tags default to the AI-generated SEO metadata. The upload runs in the background: poll get_video and read `publication` for the YouTube URL."
    },
    {
      "name": "get_script",
      "title": "Get the script",
      "description": "The video's script, line by line (one line per scene), with word count and estimated narration length. Use it on a script_ready video before approve_script, or on any video to read what is narrated."
    },
    {
      "name": "update_script",
      "title": "Edit the script",
      "description": "Replace the script of a script_ready video. Send every line in order: lines with a scene_id keep that scene (its text replaced), lines without one are new scenes, and scenes you leave out are deleted. To change lines of an already rendered video use edit_scene_line instead."
    },
    {
      "name": "approve_script",
      "title": "Approve the script",
      "description": "Render a script_ready video: narration, images, captions, music and the final video. This is where most of the cost is spent, so it passes the same credit check as start_video."
    },
    {
      "name": "list_scenes",
      "title": "List scenes and images",
      "description": "Every scene of a video in order: its narration line, timing, and each image (slide) shown during it, with the image URL, the exact words it illustrates, the storyboarded visual it was drawn from, and the image check result (passed, redraws, issues). Also returns the key subjects every image was told to draw accurately. Use the ids with edit_scene_line, regenerate_scene_image and regenerate_slide_image."
    },
    {
      "name": "edit_scene_line",
      "title": "Edit one line",
      "description": "Change one scene's narration on a completed or failed video. Only that line is re-voiced and only its images are redrawn; every other scene, the SEO and the thumbnail are kept, and the video is re-rendered."
    },
    {
      "name": "regenerate_scene_image",
      "title": "Redraw a scene's images",
      "description": "Redraw every image of one scene (text and voice untouched), then re-render the video."
    },
    {
      "name": "regenerate_slide_image",
      "title": "Redraw one image",
      "description": "Redraw a single image (slide), e.g. one with a mangled hand, a poor match or a repeated shot, then re-render the video (or, at storyboard_ready, park it for review again). Pass `visual` to replace what the picture shows; everything else is kept."
    },
    {
      "name": "approve_storyboard",
      "title": "Approve the images",
      "description": "Render a storyboard_ready video (created with review_storyboard): captions, music, effects and the final video from the approved images. No new images are drawn."
    },
    {
      "name": "set_key_subjects",
      "title": "Pin key subjects",
      "description": "Set the video's key subjects: the characters, creatures and objects every picture must draw the same way, each with an exact look and optionally a reference image. Before the images step (draft, script_ready) it applies to every picture. On a drawn video set redraw=true to redraw just the pictures of subjects whose look changed."
    },
    {
      "name": "regenerate_voice",
      "title": "Re-voice the video",
      "description": "Re-narrate a completed or failed video, optionally with a different voice, vibe or speed. Images, SEO and thumbnail are kept; image timing follows the new narration."
    },
    {
      "name": "update_video_settings",
      "title": "Change creative settings",
      "description": "Change a video's creative settings. On a completed or failed video, caption, pop-word, motion, transition, music, sound-effect and audio-mix changes (sfx_peak_vs_voice_db, music_duck_db, loudness_target_lufs, music_track) re-render it from the existing images and voice (cheap, no new AI generation). Image, storyboard and hook settings only affect pictures drawn afterwards; pronunciations apply on regenerate_voice."
    },
    {
      "name": "set_video_metadata",
      "title": "Set title, description and tags",
      "description": "Set your own YouTube title, description, tags, chapters and/or thumbnail headline (pick from get_video.seo_options or write your own). Applies now on a finished video and survives any later re-render. Changing thumbnail_headline also redraws the thumbnail."
    },
    {
      "name": "regenerate_thumbnail",
      "title": "Redraw the thumbnail",
      "description": "Redraw a completed video's thumbnail, optionally with a new headline (e.g. one of get_video.seo_options.thumbnail_headlines) and lettering/subject options (colour, stroke, font, subject, expression, variants). With variants > 1 the extras appear in get_video.thumbnail_variants for select_thumbnail. Replaces earlier variants, uploads included."
    },
    {
      "name": "select_thumbnail",
      "title": "Choose a thumbnail",
      "description": "Use one of get_video.thumbnail_variants as the video's thumbnail; the current one becomes a variant. Re-publish (or set it in YouTube Studio) to change an already uploaded video."
    },
    {
      "name": "upload_thumbnail",
      "title": "Upload your own thumbnail",
      "description": "Use your own thumbnail image (PNG or JPEG, at most 2 MB, ideally 1280x720) instead of the drawn one. Give an https image_url or image_base64. The drawn thumbnail stays available as a variant."
    },
    {
      "name": "get_video_stats",
      "title": "Get YouTube performance",
      "description": "Live YouTube views, likes and comments for the account's published videos, next to the settings each was made with (topic, style, voice, vibe, creative settings, length), so you can learn what works. Pass video ids, or omit them for the 50 most recent."
    },
    {
      "name": "list_youtube_channels",
      "title": "List YouTube channels",
      "description": "The YouTube channels connected to the account for publishing. Connecting a channel needs a human (Google OAuth): if none are connected, give your user the connect_url."
    },
    {
      "name": "list_schedules",
      "title": "List schedules",
      "description": "Autopilot schedules: each turns a queue of topics into videos on a cadence (daily, every 2 days, weekly) and can auto-publish them to YouTube."
    },
    {
      "name": "get_schedule",
      "title": "Get a schedule",
      "description": "One schedule with its topic queue (pending, generating, completed, failed topics and their video ids)."
    },
    {
      "name": "create_schedule",
      "title": "Create a schedule",
      "description": "Put a channel on autopilot: SimilarClip produces one video per run from the topic queue (queue topics via `topics`, add_schedule_topics or generate_schedule_topics; a run with an empty queue is skipped) and optionally auto-publishes each to YouTube."
    },
    {
      "name": "add_schedule_topics",
      "title": "Queue schedule topics",
      "description": "Append topics to a schedule's queue (duplicates are skipped). One topic is consumed per run."
    },
    {
      "name": "generate_schedule_topics",
      "title": "Brainstorm schedule topics",
      "description": "Have the AI brainstorm fresh, non-duplicate topics from the schedule's niche and append them to its queue."
    },
    {
      "name": "update_schedule",
      "title": "Edit a schedule",
      "description": "Change any of a schedule's settings. Only the fields you send change. Changing frequency, time_of_day or timezone re-plans the next run."
    },
    {
      "name": "delete_schedule",
      "title": "Delete a schedule",
      "description": "Delete a schedule and its topic queue. Videos it already made are kept."
    },
    {
      "name": "delete_schedule_topic",
      "title": "Remove a queued topic",
      "description": "Remove a pending topic from a schedule's queue (topics already turned into videos stay in the history)."
    },
    {
      "name": "set_schedule_enabled",
      "title": "Enable or pause a schedule",
      "description": "Turn a schedule on or off."
    },
    {
      "name": "run_schedule_now",
      "title": "Run a schedule now",
      "description": "Produce the schedule's next video immediately instead of waiting for its next slot."
    },
    {
      "name": "update_account_settings",
      "title": "Update account settings",
      "description": "Account-wide defaults that create_video and create_schedule use when a field is omitted: style, custom_style_prompt and voice (provider, voice, vibe, instructions, speed), plus description_footer, appended to every YouTube description this account publishes (links, socials, a call to action). Omitted fields are left as they are; \"\" clears custom_style_prompt, voice.instructions or description_footer. Returns the saved settings."
    },
    {
      "name": "list_webhooks",
      "title": "List webhooks",
      "description": "The account's webhook endpoints, the events each receives, and how the last delivery went."
    },
    {
      "name": "create_webhook",
      "title": "Create a webhook",
      "description": "Have SimilarClip POST to your HTTPS endpoint when a video's script is ready, it completes or fails, or a publish succeeds or fails, instead of polling. The response includes the signing secret ONCE: verify X-SimilarClip-Signature (t=<unix>,v1=<hex HMAC-SHA256 of \"<t>.<raw body>\">) with it. Failed deliveries retry with backoff for about 15 minutes."
    },
    {
      "name": "delete_webhook",
      "title": "Delete a webhook",
      "description": "Stop sending events to an endpoint."
    }
  ]
}