The content studio MCP for coding agents — BYO-key generation, deterministic video/carousel rendering, draft-first social publishing.
broll demonstrates solid tool design with clear verb-noun naming (generate_image, render_video, publish_post) and comprehensive descriptions (avg 180 chars, well above 10-char minimum). All 14 tools have descriptions and input schemas with type definitions. However, output schemas are not explicitly documented in the visible code, responses are JSON-serialized but structure is inferred rather than formally declared. Parameter descriptions are present but some lack constraint details (e.g., 'aspect' enum is clear, but 'durationSec' lacks explicit min/max in description text). Error handling uses a guard() wrapper that returns isError flag, but recovery guidance is minimal, errors are JSON-serialized but lack actionable next steps. Tool composition is strong: each tool has one clear responsibility, and chaining is supported (e.g., generate_image returns asset ids usable in render_video). Security is well-handled: no secrets in parameters, and the server uses environment-based configuration. Naming is consistent and action-oriented across all tools.
Report workspace location, ffmpeg availability, configured generation providers, and social platform readiness. Call this first to see what is possible. Pass probe: true to live-verify social credentials (makes real authenticated API calls, posts nothing).
Create a reviewable post draft (text + media + target platforms). Validates against per-platform rules (char limits, media counts/sizes) and reports violations. Nothing is published — drafts are files the user can inspect; use publish_post to send.
Create a multi-post thread draft. On publish, posts chain as replies under the first one (Bluesky reply refs, X in_reply_to). Each post has its own text and up to 4 images, validated per platform. Nothing is published until publish_post with confirm: true.
Delete a draft by id. Drafts are just files — this removes them from the workspace.
Extract a single PNG frame from a video at a timestamp — use it to visually QA a render.
Generate image(s) with the user's own API keys (BYO-key: OpenAI or Gemini; falls back to a labelled mock when no keys are set). Returns workspace asset ids usable in render_video, render_carousel, and post drafts.
Output schemas not formally documented. Tools return JSON via json() helper, but response structure (fields, types, nested objects) is not declared in tool registration. LLMs cannot plan downstream calls without knowing what fields to expect.
Complex input schemas (RenderPlanSchema, CarouselSpecSchema) are referenced but not inlined or documented in tool descriptions. LLMs cannot see the nested structure of 'plan' and 'spec' parameters, forcing them to guess valid fields.
Error responses lack recovery guidance. The fail() helper returns JSON with an 'error' field, but does not suggest next steps (e.g., 'Try calling broll_status first' or 'Check that ffmpeg is installed'). Agents cannot self-correct.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 62 | 2026-07-28+ | v2 |
Generate a short video clip with the user's own API keys (Gemini Veo when configured; labelled mock otherwise). Expensive with real keys — only call when the user's workflow needs generated footage.
Copy a local file (image/video/audio) into the broll workspace and get an asset id for it.
List workspace assets (generated, imported, and rendered), optionally filtered by kind.
List all saved post/thread drafts with their ids, text previews, and validation status.
Inspect a media file: duration, dimensions, codecs, streams. Accepts an asset id or absolute path.
Publish a draft to configured social platforms. Requires confirm: true to prevent accidental posts. Returns per-platform results (URLs, IDs, errors). Bluesky and X are live; export bundles are local files.
Render branded carousel slides (the Instagram/LinkedIn format). Layout, fonts, accent bar, page numbers, and watermark are deterministic code; backgrounds can be plain color or any image asset. Returns one asset per slide.
Compile a declarative RenderPlan into an mp4 via ffmpeg — deterministic, brand-aware, no generation keys needed. Clips (video/image/color) are concatenated in order; overlays and captions are burned in; optional music is mixed under clip audio. Returns the rendered asset id.
publish_post is irreversible but lacks explicit confirmation pattern in description. While confirm: true parameter exists, the description does not emphasize that this is a destructive operation or explain the consequences of confirm: false.
list_assets and list_drafts lack pagination parameters (limit, offset, cursor). If workspace contains hundreds of assets or drafts, responses could exhaust context window. No indication of result count or truncation.