{"name":"siren","title":"Siren","transport":"streamable-http","url":"https://mcp.mysiren.ai/mcp","auth":"oauth2","tools":[{"name":"get_account","description":"Get the connected Siren workspace: plan, key scopes, auto-post setting, and daily limit. Call this first to learn what the account can do before generating. Empty asset_types / channels / connected_accounts lists mean unrestricted, not missing.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"annotations":{"readOnlyHint":true}},{"name":"list_runs","description":"List the workspace's generation runs (newest first): status, brief, channel, asset URLs, and caption. Page with offset to see every video and image.","inputSchema":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":50,"default":10},"offset":{"type":"integer","minimum":0,"default":0}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},{"name":"get_run","description":"Get one run by id — full status, output text, asset URLs, caption, and any error. Poll this after create_campaign or render_asset until status is terminal; wait poll_after_seconds between polls (progress and eta_seconds say how far along). A finished run carries caption (the post caption, in the run's brand). A finished film carries film_check, advice only: when ok is false, show the human the video and the findings and let them decide; re-render at most once, for a defect you can name in what you sent. notices are plain notes on the request (e.g. a mood the brand's look does not wear): made as asked, pass them to the human. After post_run, posts[] carries each platform's live url and the caption that went out.","inputSchema":{"type":"object","properties":{"run_id":{"type":"string"}},"required":["run_id"],"additionalProperties":false},"annotations":{"readOnlyHint":true}},{"name":"list_platinum_films","description":"The platinum shelf: studio-grade films, 50 credits each every time (a normal film is 25). Offer one only for a big launch the human wants to go far; everyday posts use list_films. Ids end in -plt. Needs a paid plan or a credit top-up (not a complimentary plan). voice MM = motion + music only, MVM = motion, voice and music.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"annotations":{"readOnlyHint":true}},{"name":"list_films","description":"The film library, one ranked page at a time. Films sit on job shelves (launch, feature, explain, brand, ai, proof, app, shop, people); pass job and the human's goal and hire from the top. Each film: what it is, when to hire it, length, shapes, fits_this_brand, made_recently. search finds by word, page pages on, all=true returns every film. The whole library as a file: https://api.mysiren.ai/api/v1/films.md. Videos are on every plan; credits are the only limit. Films here are 25 credits; platinum films (50) sit in the answer's platinum section and in list_platinum_films.","inputSchema":{"type":"object","properties":{"job":{"type":"string","enum":["launch","feature","explain","brand","ai","proof","app","shop","people"],"description":"The shelf to browse."},"goal":{"type":"string","description":"The human's own words for the outcome; ranks by fit."},"search":{"type":"string","description":"Find films by word across ids, names and descriptions."},"page":{"type":"integer","description":"Page number, from 1."},"page_size":{"type":"integer","description":"Films per page, 1 to 25 (default 8)."},"all":{"type":"boolean","description":"Every film that passes the filters on one page."},"max_seconds":{"type":"number","description":"Only films this long or shorter."},"narrated":{"type":"boolean","description":"Only films with (true) or without (false) a voice-over part."},"aspect":{"type":"string","description":"Only films that render this shape, e.g. story-reel."},"detail":{"type":"string","enum":["short","full"],"description":"full adds the long description."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},{"name":"list_styles","description":"The still style library, one ranked page at a time. Every painted still is one style; styles sit on section shelves (social-ad, poster, launch, brand, og, youtube, app-store, event, wallpaper, arts-creative). Pass section and the human's goal and take one from the top; made_recently marks looks this brand just got. Pin one by writing its id in the create_campaign brief. The whole library as a file: https://api.mysiren.ai/api/v1/styles.md.","inputSchema":{"type":"object","properties":{"section":{"type":"string","enum":["social-ad","poster","launch","brand","og","youtube","app-store","event","wallpaper","arts-creative"],"description":"The shelf to browse."},"goal":{"type":"string","description":"The human's own words for the still; ranks by fit."},"search":{"type":"string","description":"Find styles by word in their id or when-to-pick line."},"page":{"type":"integer","description":"Page number, from 1."},"page_size":{"type":"integer","description":"Styles per page, 1 to 25 (default 8)."},"aspect":{"type":"string","description":"Only styles that paint on this shape, e.g. square-ig."},"all":{"type":"boolean","description":"Every style that passes the filters on one page."}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},{"name":"describe_film","description":"The full contract for one film: body JSON Schema, a reference body, the seed envelope, media slots, brand prefills and override rules. Call before writing a render_asset body.","inputSchema":{"type":"object","properties":{"output_type":{"type":"string"}},"required":["output_type"],"additionalProperties":false},"annotations":{"readOnlyHint":true}},{"name":"create_campaign","description":"Create a Siren campaign from a plain-language brief — plan, on-brand copy, deterministic render, verify. Returns the run; poll get_run until it finishes. Spends credits. Optional output_type pins a film (list_films). Optional scheduled_at (ISO-8601) queues a sequential post when render succeeds (requires Allow posting). Optional brand makes it for ANOTHER brand (clean slate, nothing of this workspace leaks). Film knobs: voiceover, direction, music, media.","inputSchema":{"type":"object","properties":{"brief":{"type":"string"},"channel":{"type":"string","default":"twitter"},"asset_type":{"type":"string","default":"card"},"output_type":{"type":"string","description":"Pin a film id from list_films (e.g. story, pitch). Omit and Siren picks."},"caption":{"type":"string","description":"Optional caption for the post; your words are kept. Omit and Siren writes it."},"voiceover":{"type":"boolean","description":"Films: true narrated, false motion + music only. Omit and the brief decides; if the human never said, ask once."},"direction":{"type":"string","description":"Films: one line on mood, pace, motion and music, e.g. \"emotional, slow, soft piano\"."},"music":{"type":"string","description":"Films: a music bed track_id. Omit and the bed follows the film."},"media":{"type":"array","items":{"type":"string"},"description":"Films: upload_media URLs (images and videos) for the film to show. Not used for images."},"scheduled_at":{"type":"string","description":"ISO-8601 time to post after render, e.g. 2026-09-02T09:00:00-04:00"},"timezone":{"type":"string","default":"UTC","description":"IANA timezone (Africa/Lagos, America/New_York)"},"platforms":{"type":"array","items":{"type":"string"},"description":"x, instagram, tiktok, linkedin, youtube, or everything"},"brand":{"type":"object","description":"Make it for ANOTHER brand instead of this workspace's own (a client, a brand people recognise, a side project). Object: {name (required), site, logo_url (https PNG/SVG/JPG of the brand's MARK or app icon, e.g. Duolingo's owl, not the wordmark: the film sets the name in type), accent (hex: the brand's signature colour, the one films are painted in), primary (hex: its dark or ink colour), secondary, tagline, font (the brand's typeface name, e.g. Nunito), x_handle, sells (one line: what they make)}. Clean slate: none of this workspace's logo, colours, mascot, font, handle, screenshots or memory is used; only what you send. Look up the brand's real site, logo URL and colours first. Omit to use this workspace's Brand DNA.","properties":{"name":{"type":"string"},"site":{"type":"string"},"logo_url":{"type":"string"},"primary":{"type":"string"},"accent":{"type":"string"},"secondary":{"type":"string"},"tagline":{"type":"string"},"font":{"type":"string"},"x_handle":{"type":"string"},"sells":{"type":"string"}},"required":["name"]}},"required":["brief"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"clarify_brief","description":"Ask Siren's clarifier whether a brief is specific enough to generate from. Returns ready=true/false plus follow-up questions.","inputSchema":{"type":"object","properties":{"brief":{"type":"string"}},"required":["brief"],"additionalProperties":false},"annotations":{"readOnlyHint":true}},{"name":"render_asset","description":"Render films from pre-formed SirenSeed bodies (advanced). Films only: images, ads and creatives go through create_campaign with asset_type=card. Siren's director edits each film body against Brand DNA first (keeps the film and your brand-specific lines, rewrites generic or example copy, never touches media) and returns what it changed. A film that cannot use what you sent returns 422 film_does_not_fit with films_that_fit. Prefer create_campaign unless the user has concrete seed JSON. Items take direction (a free line that steers words, pace and music) and music (a bed id). An item's brand_override with a name renders for ANOTHER brand, clean slate.","inputSchema":{"type":"object","properties":{"items":{"type":"array","items":{"type":"object"}},"name":{"type":"string"}},"required":["items"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"upload_media","description":"Store a photo or video for use in a seed, from an https URL or base64. Returns a workspace-owned URL to put in any media slot of a film body. Images: PNG/JPG/WebP up to 15 MB. Videos: MP4/MOV/WebM up to 200 MB.","inputSchema":{"type":"object","properties":{"url":{"type":"string","description":"Public https URL of the media."},"base64":{"type":"string","description":"The media bytes as base64."},"kind":{"type":"string","default":"auto","enum":["auto","image","video"]},"name":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":false}},{"name":"edit_asset","description":"Edit a finished ad creative (painted still) in place: only what the instruction names changes, every other pixel is kept, so edits can be chained without drift. About 15 seconds. 3 credits; asking for a new look repaints at 10. Returns the new run; poll get_run. Films: use render_asset.","inputSchema":{"type":"object","properties":{"run_id":{"type":"string"},"instruction":{"type":"string","description":"What to change, in plain words."}},"required":["run_id","instruction"],"additionalProperties":false},"annotations":{"readOnlyHint":false}},{"name":"post_run","description":"Post a finished run's assets to the workspace's connected social account. Live public distribution — always confirm with the user before calling. Queues behind a short publish window (about two minutes); poll get_run and read posts[].url for the live link.","inputSchema":{"type":"object","properties":{"run_id":{"type":"string"},"platform":{"type":"string","default":"x"},"caption":{"type":"string","description":"Optional caption for this publish; goes out verbatim."}},"required":["run_id"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"schedule_post","description":"Schedule a finished run to post at a time in the customer's timezone. Platforms fire sequentially (X, LinkedIn, Instagram, TikTok, YouTube). Prefer this over post_run when they name a time. Requires Allow posting. create_campaign also accepts scheduled_at.","inputSchema":{"type":"object","properties":{"run_id":{"type":"string"},"scheduled_at":{"type":"string","description":"ISO-8601 datetime"},"timezone":{"type":"string","default":"UTC"},"platforms":{"type":"array","items":{"type":"string"},"description":"x, instagram, tiktok, linkedin, youtube, or everything"},"captions":{"type":"object","additionalProperties":{"type":"string"},"description":"Optional per-platform captions (x, meta, tiktok, ...)"}},"required":["run_id","scheduled_at"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":true}},{"name":"get_brand_dna","description":"Get this workspace's Brand DNA: brand_name, brand_kind, overview, tagline, offer, features, products, audience, palette, logos, plus checks: what to fix before rendering (thin DNA, a typed accent the brand's own work does not use). Call it right after get_account. Not Brand Memory.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"annotations":{"readOnlyHint":true}},{"name":"update_brand_dna","description":"Patch Brand DNA. Send only keys to change. Nested bags (offer, product_map, icp) merge. Does not read or write Brand Memory.","inputSchema":{"type":"object","properties":{"fields":{"type":"object","description":"Brand DNA keys to merge (tagline, overview, offer, product_map, icp, ...)"}},"required":["fields"],"additionalProperties":false},"annotations":{"readOnlyHint":false}},{"name":"list_product_screens","description":"List product UI screenshots in Brand DNA (name, type, device, theme, url).","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"annotations":{"readOnlyHint":true}},{"name":"upload_product_screen","description":"Upload a product screenshot into Brand DNA and store it on R2. Pass image_url (https PNG/JPG/WebP) or image_base64, plus name, screen_type, device, and theme.","inputSchema":{"type":"object","properties":{"name":{"type":"string"},"image_url":{"type":"string"},"image_base64":{"type":"string"},"screen_type":{"type":"string","default":"feature"},"device":{"type":"string","default":"phone"},"theme":{"type":"string","default":"unknown"}},"required":["name"],"additionalProperties":false},"annotations":{"readOnlyHint":false}},{"name":"update_product_screen","description":"Patch tags on an existing product screenshot (name, type, device, theme).","inputSchema":{"type":"object","properties":{"screen_id":{"type":"string"},"name":{"type":"string"},"screen_type":{"type":"string"},"device":{"type":"string"},"theme":{"type":"string"}},"required":["screen_id"],"additionalProperties":false},"annotations":{"readOnlyHint":false}},{"name":"delete_product_screen","description":"Remove a product screenshot from Brand DNA. Does not delete Brand Memory.","inputSchema":{"type":"object","properties":{"screen_id":{"type":"string"}},"required":["screen_id"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true}},{"name":"studio_templates","description":"List Siren Studio's 33 React data-card types with family, description, and body schema so an agent can fill studio_card.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"annotations":{"readOnlyHint":true}},{"name":"studio_card","description":"Render a Studio data card from output_type + body. Deterministic React, no paint. Optional live post after render. Returns run id, image url, and post url when posted.","inputSchema":{"type":"object","properties":{"output_type":{"type":"string"},"body":{"type":"object"},"theme":{"type":"string"},"accent":{"type":"string"},"aspect":{"type":"string"},"post":{"type":"boolean","default":false},"caption":{"type":"string"},"platform":{"type":"string","default":"x"}},"required":["output_type","body"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":true,"openWorldHint":false}},{"name":"studio_automate","description":"Create a Studio profile on this API key. Returns generate curl and inbound hook URLs for Stripe, GitHub, Uptime Kuma, Product Hunt. Delivery with social_account_ids turns on posting — needs Allow posting.","inputSchema":{"type":"object","properties":{"name":{"type":"string"},"output_types":{"type":"array","items":{"type":"string"}},"delivery":{"type":"object"},"caption":{"type":"string"}},"required":["name","output_types"],"additionalProperties":false},"annotations":{"readOnlyHint":false}},{"name":"studio_schedule","description":"Render a Studio card then queue a scheduled post at scheduled_at (ISO-8601). Requires Allow posting.","inputSchema":{"type":"object","properties":{"output_type":{"type":"string"},"body":{"type":"object"},"scheduled_at":{"type":"string"},"platforms":{"type":"array","items":{"type":"string"}},"caption":{"type":"string"},"timezone":{"type":"string","default":"UTC"}},"required":["output_type","body","scheduled_at"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true}},{"name":"upload_logo","description":"Set the workspace logo in Brand DNA from an https URL or base64 (PNG, JPG, WebP). variant light (usual) or dark.","inputSchema":{"type":"object","properties":{"image_url":{"type":"string"},"image_base64":{"type":"string"},"variant":{"type":"string","enum":["light","dark"],"default":"light"}},"additionalProperties":false},"annotations":{"readOnlyHint":false}},{"name":"get_mascot","description":"The workspace mascot: status, hero picture, tries left, and every pose frame with its URL.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"annotations":{"readOnlyHint":true}},{"name":"create_mascot","description":"Start the brand mascot from a description (note, kind, style, name) or a reference picture (image_url / image_base64). Paid plans, 100 credits. Poll get_mascot, show the human, then mascot_step.","inputSchema":{"type":"object","properties":{"image_url":{"type":"string"},"image_base64":{"type":"string"},"note":{"type":"string"},"kind":{"type":"string","enum":["auto","animal","creature","object","robot","food","abstract"],"default":"auto"},"style":{"type":"string","enum":["vinyl","clay","plush","wool","glossy"],"default":"vinyl"},"name":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":false}},{"name":"mascot_step","description":"Move the mascot on: keep (build the pose sheet), retry (paint the hero again, 3 tries), or pose (add one pose, 10 credits, 20 with a 3D model).","inputSchema":{"type":"object","properties":{"action":{"type":"string","enum":["keep","retry","pose"]},"note":{"type":"string"},"label":{"type":"string"},"prompt":{"type":"string"},"with_model":{"type":"boolean","default":false}},"additionalProperties":false,"required":["action"]},"annotations":{"readOnlyHint":false}},{"name":"list_people","description":"The people library: team faces Siren can put in stills, with name, role, team and status.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"annotations":{"readOnlyHint":true}},{"name":"add_person","description":"Add a face to the people library from an https URL or base64. Siren crops it round in seconds.","inputSchema":{"type":"object","properties":{"image_url":{"type":"string"},"image_base64":{"type":"string"},"name":{"type":"string"},"role":{"type":"string"},"team":{"type":"string"}},"additionalProperties":false},"annotations":{"readOnlyHint":false}},{"name":"delete_person","description":"Remove one face from the people library by its id from list_people.","inputSchema":{"type":"object","properties":{"person_id":{"type":"string"}},"additionalProperties":false,"required":["person_id"]},"annotations":{"readOnlyHint":false,"destructiveHint":true}},{"name":"list_media","description":"Photos and videos uploaded with upload_media, newest first, with URLs to reuse.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"annotations":{"readOnlyHint":true}},{"name":"get_performance","description":"How the posts did: totals (impressions, engagement, replies, rate) and the top posts. window 7d, 30d or 90d.","inputSchema":{"type":"object","properties":{"window":{"type":"string","enum":["7d","30d","90d"],"default":"30d"}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},{"name":"list_posts","description":"Every post Siren sent or queued: platform, status, live URL, time, and counts by status.","inputSchema":{"type":"object","properties":{"limit":{"type":"integer","minimum":1,"maximum":200,"default":50},"offset":{"type":"integer","minimum":0,"default":0}},"additionalProperties":false},"annotations":{"readOnlyHint":true}},{"name":"buy_credits","description":"A Stripe checkout link for more credits (small 50 / $9.99, medium 100 / $20, large 300 / $50, or 50 to 5000 at $0.20). The human pays; this call charges nothing.","inputSchema":{"type":"object","properties":{"pack_id":{"type":"string","enum":["small","medium","large"]},"credits":{"type":"integer","minimum":50,"maximum":5000}},"additionalProperties":false},"annotations":{"readOnlyHint":false}},{"name":"list_brand_videos","description":"The brand's own clips in Brand DNA: what each shows, when to use it, tags, best moments with timestamps, poster and scan_status.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"annotations":{"readOnlyHint":true}},{"name":"upload_brand_video","description":"Add a product demo, walkthrough or footage (MP4, MOV, WebM; 200 MB, 5 minutes) to Brand DNA from url or base64. Gemini reads frames and files it; films play it when a brief names it.","inputSchema":{"type":"object","properties":{"url":{"type":"string"},"base64":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"use_when":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}}},"additionalProperties":false},"annotations":{"readOnlyHint":false}},{"name":"delete_brand_video","description":"Remove one clip from Brand DNA by its id from list_brand_videos, file and poster included.","inputSchema":{"type":"object","properties":{"video_id":{"type":"string"}},"required":["video_id"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true}},{"name":"delete_media","description":"Delete one photo or video uploaded with upload_media, by the URL it returned. Only this workspace's uploads.","inputSchema":{"type":"object","properties":{"url":{"type":"string"}},"required":["url"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":true}},{"name":"studio_start","description":"Start a video in Siren Studio from a description or an App Store link. Siren composes the first take and replies with what it made; nothing is rendered or charged until studio_export. The human sees the same thread.","inputSchema":{"type":"object","properties":{"prompt":{"type":"string","description":"What to make, in plain words."},"template":{"type":"string","description":"Optional film id to start from."},"surface":{"type":"string","description":"Optional shape: story-reel, square-ig, wide-desktop."},"attachments":{"type":"array","items":{"type":"string"},"maxItems":6,"description":"Optional URLs from upload_media: screenshots, a logo, a reference, a short clip."}},"required":["prompt"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"openWorldHint":true}},{"name":"studio_edit","description":"Change a Studio video by asking, as the human would in the chat: only what the ask names changes. Returns Siren's reply, the diff (before and after) and the new version. No credits are spent until studio_export.","inputSchema":{"type":"object","properties":{"thread_id":{"type":"string"},"text":{"type":"string","description":"The change, in plain words. May be empty with attachments."},"attachments":{"type":"array","items":{"type":"string"},"maxItems":6,"description":"Optional URLs from upload_media to use in the video."}},"required":["thread_id","text"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"openWorldHint":true}},{"name":"studio_get","description":"One Studio video: the chat so far with every diff, all versions, and which version is current.","inputSchema":{"type":"object","properties":{"thread_id":{"type":"string"}},"required":["thread_id"],"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true}},{"name":"studio_threads","description":"The workspace's Studio videos, newest first: title, shelf, current version, and whether a human or an agent started it.","inputSchema":{"type":"object","properties":{},"additionalProperties":false},"annotations":{"readOnlyHint":true,"destructiveHint":false,"openWorldHint":true}},{"name":"studio_export","description":"Render a Studio design or video to files. A video 25 (platinum 50), a card 10, a set 10 a slide (6 slides 60), charged once. A card or set returns every file in asset_urls, slide 1 first; a video returns the run id: poll get_run until terminal.","inputSchema":{"type":"object","properties":{"thread_id":{"type":"string"},"version":{"type":"integer","description":"Version to render; omit for the current one."}},"required":["thread_id"],"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"openWorldHint":true}}]}