CineRads is fully drivable by a coding agent. Mint an API key, point Claude Code or Codex at the CineRads MCP server, and it can go from a URL to a scheduled, branded TikTok slideshow or uploaded MP4 - then learn from what performs and do it again.
The CineRads MCP server is a thin wrapper over the same edge functions the app uses. Every tool maps 1:1 to a function with its exact contract names, so an agent drives the identical pipeline you would by hand: hooks → copy → images → branded slideshow → render → publish → schedule, plus local/hosted MP4 video upload and analytics. No parallel orchestration layer, no second source of truth.
Sync-render contract:trigger_slideshow_render blocks until the deck reaches complete — there is no separate poll step. Once it returns, the deck is ready to publish.
Authentication
cra_ API keys, scoped.
Mint a key inside CineRads (it starts with cra_). Keys are sent as the x-api-key header and carry explicit scopes. Key minting is JWT-only by design, so a key can never mint other keys.
The server is published on npm (@cinerads/mcp-server). Pick your platform, run the command or paste the JSON, replace cra_your_key_here with your key, restart.
Any MCP-compatible client takes this mcpServers JSON in its config — paste, set your key, restart. Or call the API directly: send your key as the x-api-key header.
Cookbook
The actual production recipes.
These are the paths a user or agent should follow. The same MCP server covers generated decks, slideshow-lab style batches, baked HTML or Canva pages, library scheduling, MP4 publishing, and performance learning.
Generated slideshow from a URL
A rendered draft deck inside CineRads.
Use when the product URL is the source of truth and CineRads should write the hook, copy, and image matching.
1scrape_product for the website or product URL.
2list_products and pick the confirmed product id.
3generate_hooks, then pick the strongest hook.
4generate_slide_copy with the chosen carousel_style and soft_cta.
5assign_slide_images, create_slideshow, then trigger_slideshow_render.
6Review the /s link or deck in app before any TikTok publish.
Onboard this product from a URL: <url>. Scrape it, pick the confirmed product, generate 5 hooks, write a 6-slide tips_list deck, assign images, create the slideshow, render it, and leave it as a draft for review. Do not publish.
Slideshow-lab style batch
A batch of original, pattern-informed decks with share links and a manifest.
Use when you have research, competitor patterns, or a slideshow lab and want to recreate the production pipeline without copying source content.
1Read the lab/research and extract hook mechanics, pacing, slide count, visual rules, and CTA mechanics.
2Write original hooks and slide copy. Do not rewrite competitor slides.
3Choose the production lane: CineRads-native deck, HTML-rendered page images, or full-res Canva export.
4For HTML/Canva lanes, upload full-res 1080x1920 page images with upload_image and create imageOnly slideshows.
5Verify every /s link, record image dimensions, CTA, caption, and QA verdict in a manifest.
6Queue only approved full-res decks with queue_slideshows on a library automation.
Run a slideshow-lab style batch from <research folder>. Extract only the reusable mechanics, write original copy, choose the right lane for each deck, build full-res drafts, upload imageOnly decks when pages are pre-rendered, verify every /s link, and return a manifest with slideshow_id, share link, dimensions, caption, CTA, and QA notes. Do not queue until I approve.
HTML or Canva full-res page images
A CineRads image-only slideshow that preserves the exact page design.
Use when another renderer already produced final 9:16 PNG/JPG pages, including HTML slide renderers or Canva exports.
1Confirm pages are full-resolution, ideally 1080x1920 or higher.
2Upload each ordered page with upload_image.
3create_slideshow with imageOnly:true per slide, showPill:false, and overlay disabled.
4Open or fetch the public /s link and check ordering, crop, image load, and CTA readability.
5Save a manifest before scheduling.
I have full-res page images in <folder>. Upload each page, create an image-only slideshow with showPill false and overlay disabled, verify the public /s link, and return a manifest. Do not queue thumbnail or low-res images.
Library scheduling
Approved pre-built decks post on a schedule as TikTok inbox drafts.
Use after decks are already rendered or image-only and explicitly approved.
1list_automations and confirm or create an automation with content_source:'library'.
2Use post_mode:'MEDIA_UPLOAD' unless the user explicitly asks for DIRECT_POST.
3list_automation_queue before adding anything.
4queue_slideshows with the approved slideshow ids.
5Return the new queue state and do not silently direct-post.
Queue these approved slideshow ids on <automation_id> as TikTok inbox drafts: <ids>. Confirm content_source is library and post_mode is MEDIA_UPLOAD, show the queue before and after, then run queue_slideshows. Never use DIRECT_POST unless I say so.
MP4 video publish
A local or hosted MP4 becomes a CineRads generation and can be posted to TikTok.
Use when the final creative is a rendered MP4, not a slideshow row.
1Use upload_video for an absolute local .mp4 path or ingest_external_video_url for a hosted MP4.
2Pass product_id and persona_id if the account has multiple options.
3publish_video_tiktok with privacy_level:'SELF_ONLY' by default.
4Poll get_publish_status and report generation_id, publish_id, status, and errors.
Publish this MP4 through CineRads: <absolute path or hosted URL>. Use upload_video for local files or ingest_external_video_url for hosted video, then publish_video_tiktok with privacy_level SELF_ONLY unless I explicitly approve public posting. Poll status and report ids/errors.
Performance learning loop
New drafts based on what already worked.
Use after posts have enough performance signal.
1get_post_performance for recent posts and get_hook_analytics for hook-level signal.
3Create new drafts that reuse patterns, not exact old copy.
4Render and return /s links for review before publish or queue.
Run the performance learning loop. Pull recent get_post_performance and get_hook_analytics, identify the best hooks, CTAs, visuals, and slide counts, then create 3 new rendered draft decks that reuse the winning patterns with original copy. Return /s links and do not publish.
Tools
The toolset, by lifecycle stage.
Every tool is a thin wrapper over a CineRads edge function. An agent threads ids forward — product → hook → copy → images → slideshow → publish → analytics.
Discover
Find the product and what's already working.
list_productsList the products in your account.
scrape_productScrape a URL into a product (name, description, images).
list_use_casesBrowse ready-made use-case recipes to start from.
Once the MCP server is connected, paste any of these straight into Claude Code or Codex.
Audit my CineRads agent setup. Use list_products, list_tiktok_connections, list_automations, list_slideshows, get_post_performance, and get_account_insights. Tell me what can be generated, what can be scheduled, what is already queued, and what blockers remain. Do not create, publish, or queue anything.
Onboard this product from a URL: <url>. Scrape it, pick or create the brand profile, generate 5 hooks, write a 6-slide tips_list deck, assign images, create the slideshow, render it, and leave it as a draft for review. Do not publish until I approve.
Run a slideshow-lab style batch from <research folder>. Extract only reusable mechanics, write original copy, choose the right lane for each deck, build full-res drafts, upload imageOnly decks when pages are pre-rendered, verify every /s link, and return a manifest with slideshow_id, share link, dimensions, caption, CTA, and QA notes. Do not queue until I approve.
Build a baked image slideshow from local HTML/PNG output. I have one folder per deck at <folder>, with 1080x1920 page images in order. Upload each page with upload_image, create an image-only slideshow with showPill false and overlay disabled, verify the public /s/ link, and save the slideshow ids. Do not queue thumbnail or low-res images.
Take my full-resolution Canva exports from <folder>. For each deck, upload the page PNGs, create an image-only slideshow, verify the /s/ link, set the provided caption if I give one, and return a manifest with deck name, slideshow_id, share link, image dimensions, and QA notes. Do not schedule until I explicitly approve.
Queue these approved pre-built slideshow ids as TikTok inbox drafts: <ids>. First run list_automations and list_automation_queue for <automation_id>. Confirm the automation uses content_source library and post_mode MEDIA_UPLOAD. Then run queue_slideshows and show the new queue count. Never use DIRECT_POST unless I say so.
Publish a locally rendered MP4 through CineRads. Upload /absolute/path/final.mp4 with upload_video, then publish_video_tiktok using privacy_level SELF_ONLY unless I explicitly request public direct posting. Poll get_publish_status until it is not uploading, and report the generation_id, publish_id, status, and any TikTok error.
Run the performance learning loop. Pull get_post_performance and get_hook_analytics for the last 50 posts, identify the best hooks, CTAs, visuals, and slide counts, then create 3 new draft decks that reuse only the winning patterns. Render them, return the /s/ links, and do not publish.
Wire it up in two minutes.
Create a key, paste the config, hand your agent a prompt.