{"slug": "show-hn-broll-an-mcp-server-that-gives-coding-agents-a-content-studio", "title": "Show HN: Broll – an MCP server that gives coding agents a content studio", "summary": "Broll, an MCP server for coding agents, launches as an open-source tool that lets developers generate media, render videos and carousels, and publish content through a draft-first outbox using their own API keys. The tool integrates with Claude Code and Codex, offering deterministic rendering and platform validation before posting.", "body_md": "**The content studio MCP for coding agents.** broll gives Claude Code, Codex, and any MCP client real hands for content work: generate media with *your own* API keys, render videos and carousels deterministically with code, and publish through a draft-first outbox.\n\nThe model plans. Code renders. Nothing posts without confirmation.\n\nEvery developer running a coding agent hits the same wall: the agent can write the marketing plan, but it can't *make* the carousel, cut the video, or post it. Existing tools are credit-metered schedulers built for social media managers. broll is built for developers:\n\n**BYO keys, no markup.** Image/video generation uses your`OPENAI_API_KEY`\n\n/`GEMINI_API_KEY`\n\ndirectly. broll never proxies your inference or resells credits. A built-in mock provider keeps every workflow runnable before you add any keys.**Deterministic rendering.** Videos and slides are compiled from declarative plans into exact ffmpeg/sharp invocations. Same plan + same inputs = same output. When AI output drifts, the fix is code — so layout, fonts, captions, and branding live in code.**Draft-first publishing.** Posts are reviewable JSON files in an outbox.`publish_post`\n\nrequires`confirm: true`\n\n, validates per-platform rules (char limits, media counts, file sizes) before anything leaves the machine, and reports per-platform results. The`export`\n\nplatform always works: it writes a ready-to-post bundle.\n\nRequires Node 20+ and ffmpeg (`brew install ffmpeg`\n\n).\n\n```\ncd broll\nnpm install && npm run build\n```\n\nRegister with Claude Code (or use the checked-in `.mcp.json`\n\nwhen working inside this repo):\n\n```\nclaude mcp add broll -- node /path/to/broll/dist/index.js\n```\n\nOptional environment:\n\n| Variable | Purpose |\n|---|---|\n`OPENAI_API_KEY` |\ngpt-image-1 image generation |\n`GEMINI_API_KEY` |\nImagen images + Veo video generation |\n`BLUESKY_IDENTIFIER` / `BLUESKY_APP_PASSWORD` |\nlive Bluesky posting (use an app password) |\n`MASTODON_ACCESS_TOKEN` (+ optional `MASTODON_INSTANCE` ) |\nlive Mastodon posting — no app review, any instance |\n`X_API_KEY` / `X_API_SECRET` / `X_ACCESS_TOKEN` / `X_ACCESS_TOKEN_SECRET` |\nlive X posting (free API tier works) |\n`BROLL_HOME` |\nworkspace location (default `~/.broll` ) |\n`BROLL_FFMPEG` / `BROLL_FFPROBE` |\nexplicit binary paths |\n\nBrand kit: drop a `broll.config.json`\n\nnext to where the server runs (see this repo's for an example) — name, handle, colors, font, logo. Every render picks it up automatically.\n\n| Tool | What it does |\n|---|---|\n`broll_status` |\nWorkspace, ffmpeg, provider + platform readiness. Call first. |\n`generate_image` / `generate_video` |\nBYO-key generation → workspace assets (mock fallback when keyless) |\n`import_asset` / `list_assets` / `probe_asset` |\nBring in and inspect media |\n`render_video` |\nDeclarative RenderPlan → mp4: clips (video/image/color), trims, cover/contain fits, burned-in titles + timed captions, music bed, 9:16 / 1:1 / 4:5 / 16:9 |\n`render_carousel` |\nBranded slide sets (the Instagram/LinkedIn format): kicker, headline, body, accent bar, page numbers, watermark — layout is 100% code |\n`extract_frame` |\nPull a PNG frame so the agent can visually QA its own render |\n`create_post_draft` |\nText + media + platforms → validated, reviewable draft in the outbox |\n`list_drafts` / `publish_post` |\nInspect the outbox; publish with explicit `confirm: true` |\n\n```\nnpm run smoke\n```\n\ndrives the real server through a real MCP client: generates a background, renders a 3-slide carousel and a 9:16 teaser video with captions, extracts a QA frame, then drafts and \"publishes\" an export bundle — all into `./.broll/`\n\n.\n\nThe local server you're looking at stays MIT and free. **broll cloud** adds the parts a local server can't do well: the app-review-walled platforms (Instagram, LinkedIn, TikTok) through broll's own approved credentials, schedules that run while your laptop is closed, and a swipe-to-approve inbox on your phone. ~$29/mo when it ships.\n\n** Join the waitlist → 👍 issue #1** — subscribers get the launch note; comments set the platform build order.\n\n- Nothing is published without a draft file on disk first.\n`publish_post`\n\nhard-requires`confirm: true`\n\n— agents are instructed to obtain the user's explicit go-ahead.- Constraint violations block publishing; they never auto-truncate your text.\n- Keys are read from your environment and sent only to their own vendor's API.\n\nEarly but real: 96 tests including real-ffmpeg integration renders and a full MCP round trip.\n\n- Bluesky video upload\n- X chunked video upload\n- LinkedIn adapter (needs app review)\n- Mastodon adapter\n- YouTube Shorts via user OAuth\n- Ken Burns / crossfade transitions\n- Word-level caption timing from transcripts\n-\n`npx broll-mcp`\n\ndistribution\n\n```\nnpm test          # unit + integration (real ffmpeg)\nnpm run typecheck\nnpm run smoke     # end-to-end artifact check\n```\n\nMIT.", "url": "https://wpnews.pro/news/show-hn-broll-an-mcp-server-that-gives-coding-agents-a-content-studio", "canonical_source": "https://github.com/luke-fairbanks/broll", "published_at": "2026-07-12 16:40:20+00:00", "updated_at": "2026-07-12 17:05:30.600547+00:00", "lang": "en", "topics": ["developer-tools", "ai-tools", "generative-ai"], "entities": ["Broll", "Claude Code", "Codex", "OpenAI", "Gemini", "Bluesky", "Mastodon", "X"], "alternates": {"html": "https://wpnews.pro/news/show-hn-broll-an-mcp-server-that-gives-coding-agents-a-content-studio", "markdown": "https://wpnews.pro/news/show-hn-broll-an-mcp-server-that-gives-coding-agents-a-content-studio.md", "text": "https://wpnews.pro/news/show-hn-broll-an-mcp-server-that-gives-coding-agents-a-content-studio.txt", "jsonld": "https://wpnews.pro/news/show-hn-broll-an-mcp-server-that-gives-coding-agents-a-content-studio.jsonld"}}