MCP server that creates LinkedIn carousel PDFs from articles, YouTube transcripts, or markdown
carousels-mcp has well-structured tool definitions with detailed descriptions and clear use-case guidance. All 6 tools are explicitly registered with descriptions (50-400+ chars, exceeding baseline 194 avg). Input schemas are present and typed. However, parameter descriptions are sparse or missing in several tools (preview_slides, render_slides, create_carousel lack granular param docs), and output schemas are not formally documented. Error handling guidance is absent. The server demonstrates good naming (verb_noun pattern) and composition, but falls short of A-grade polish due to incomplete schema documentation and missing recovery guidance.
Full pipeline: content → slides → PDF/PNG in one call. Supports three input modes: **Mode 1 (Content provided):** Pass article text, markdown, or transcript in the content field. The tool extracts key points, generates slides, and produces output immediately. **Mode 2 (URL provided):** Pass a sourceUrl. The tool fetches the page, extracts article content, and runs the full pipeline. If the page is JavaScript-rendered and extraction fails, the tool returns fallback instructions to use firecrawl_scrape or web_fetch instead. **Mode 3 (Topic only):** Pass a topic without content or sourceUrl. The tool returns orchestration instructions with multiple research workflows: • Web Research: Use gemini_deep_research → pass result as content • YouTube Summary: Use supadata_transcript → summarize with gemini_chat → pass as content • Data-Driven: Use gemini_deep_research → preview_slides → generate_svg for charts → render_slides • Quick Draft: Use web_fetch to grab a page → pass as content **Common workflows the user might request:** 1. "Make a carousel about [topic]" → Call with topic param, follow returned workflow 2. "Turn this article into a carousel: [url]" → Call with sourceUrl param 3. "Here's my content, make a carousel" → Call with content param 4. "Research [topic] and make a carousel with charts" → Call with topic, follow Data-Driven workflow **Platforms:** linkedin (1080×1350 PDF), instagram (1080×1080 PNGs), threads (1080×1350 PNGs) **After rendering:** Consider using analyze_image (Gemini MCP) to review the output quality.
Create a custom brand template by overriding colors, typography, and layout from a base template. **When to call:** When the user wants their carousels to match their brand identity. Saves the template for future use. **Tips:** - Start from 'professional' as base. It has the most polished defaults - Pick a dominant accent hue and build a monochromatic gradient (same hue, two lightness stops) - Use warm backgrounds (#F5F3EF) not cold (#FAFAFA) - Avoid Inter, Roboto, Arial. Choose distinctive fonts like Plus Jakarta Sans, Space Grotesk, Outfit - Pair a geometric display font with an editorial serif body font (Frank Ruhl Libre, Source Serif 4) **Returns:** Saved template path and confirmation.
Output schemas not documented. Tool descriptions explain what is returned (e.g., 'SlidePlan JSON', 'Output paths'), but formal return type schemas are absent. LLMs cannot reliably extract fields from undocumented responses.
Parameter descriptions incomplete. 'colors', 'typography', 'layout' in create_template are typed as 'object' with minimal guidance. 'slidePlan' in render_slides lacks format/structure hints. LLMs cannot validate or construct these complex inputs without examples or schema details.
No error handling or recovery guidance. Tools lack descriptions of failure modes (e.g., 'If URL fetch fails, try firecrawl_scrape'). create_carousel mentions fallback instructions in description but does not formalize error responses.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 58 | 2026-07-28+ | v2 |
List available carousel design templates (built-in + user brand kits). **When to call:** Before creating a carousel, to check if the user has custom brand templates. If they do, suggest using their branded design instead of the default. **Returns:** Array of template objects with name, description, and builtin flag.
Convert content into a structured slide plan WITHOUT rendering. Returns editable JSON. **When to call:** When the user wants to review or edit slide content before rendering. Also use as the first step in the enhanced workflow (preview → enhance with Gemini → render). **Workflow: Enhanced visuals** 1. Call preview_slides with the content 2. Review the returned slide plan. Each slide may have an aiSuggestion field 3. For slides with aiSuggestions, use Gemini MCP tools: - generate_svg for diagrams, charts, flowcharts - generate_image for hero images, illustrations - gemini_chat to rewrite slide copy for punchier hooks 4. Inject generated SVGs into the slide's customSvg field 5. Call render_slides with the enhanced plan **Returns:** SlidePlan JSON with slides array, sourceTitle, summary.
Convert external SVG files into a merged PDF carousel or PNG set. **When to call:** When you have hand-crafted SVG slides (not generated by this MCP) and need to convert them into a LinkedIn PDF carousel or Instagram/Threads PNGs. Also useful for mixing hand-crafted and template-generated slides. **Features:** - Reads SVG files from disk in the order provided - Auto-embeds Google Fonts (replaces @import URLs with base64-encoded fonts for reliable rendering) - Converts via Puppeteer to PDF or PNG - Merges into a single carousel.pdf for LinkedIn **Returns:** Output paths and status.
Render a slide plan into SVG + PDF (LinkedIn) or PNG (Instagram/Threads). **When to call:** After preview_slides when you've reviewed or enhanced the slide plan. Also accepts manually crafted slide plans. **Supports Gemini-generated visuals:** Any slide in the plan can include: - customSvg: Raw SVG content (from generate_svg) embedded directly into the slide - customImageUrl: Local file path to an image (from generate_image) **Tip:** Run list_templates first to check for user brand kits. **Returns:** Output paths (SVG, PDF/PNG), template used, platform.
STDIO transport only. Server is not remotely accessible and cannot be used by hosted MCP clients. Limits deployment to local/CLI-only scenarios.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). list_templates and preview_slides are read-only; render_slides, create_carousel, create_template, render_from_files are destructive. Annotations would help agents reason about side effects and retry safety.