MCP Hub
Back to servers

DeckForge

Generate executive-ready presentations via API. 32 slide types, 24 chart types, 15 themes, finance vertical with DCF/comp tables/waterfalls. Renders PPTX from JSON IR or natural language prompts.

glama
Stars
1
Updated
Apr 2, 2026
Validated
Apr 24, 2026

DeckForge

API-first presentation generation for humans and AI agents

CI Python 3.12 MIT License npm @lukastan/deckforge API Live 32 slide types 24 chart types 15 themes MCP Server


Executive-ready slides, one API call away. Send a JSON intermediate representation (IR) or a natural-language prompt and get back a .pptx file, Google Slides deck, or thumbnail PNG -- with professional layout, consistent branding, and verified quality.

Features

  • 32 slide types -- title, agenda, bullet points, comparison, timeline, process flow, org chart, stats callout, table, chart, matrix, funnel, map, and more
  • 9 finance-specific slides -- DCF summary, comp table, waterfall chart, deal overview, returns analysis, capital structure, market landscape, risk matrix, investment thesis
  • 24 chart types -- bar, line, area, pie, donut, scatter, bubble, combo, waterfall, funnel, treemap, radar, tornado, football field, sensitivity table, heatmap, sankey, gantt, sunburst, and more
  • 15 built-in themes -- corporate-blue, executive-dark, finance-pro, modern-gradient, minimal-light, tech-neon, and 9 others (plus custom brand kits)
  • Native PPTX output -- python-pptx rendering with element-level control, transitions, and chart embedding
  • Google Slides output -- direct export via Google Slides API (OAuth flow included)
  • AI content generation -- natural-language to slides via Claude, OpenAI, Gemini, or Ollama (4-stage pipeline: intent, outline, expand, refine)
  • 5-pass QA pipeline -- automated quality checks with auto-fix engine for contrast, overflow, alignment, and more
  • Constraint-based layout -- kiwisolver constraint solver, 12-column grid, adaptive overflow (font reduce, reflow, split)
  • MCP server -- 6 tools for AI agent integration (render, generate, themes, slide types, estimate, preview)
  • x402 machine payments -- per-call USDC pricing on Base L2 for autonomous AI agents
  • Stripe billing -- subscription tiers (Starter free, Pro $79/mo, Enterprise custom) with credit system
  • TypeScript SDK -- @deckforge/sdk with fluent builder pattern, full type safety, SSE streaming

Quick Start

Get from zero to your first rendered deck in under 5 minutes.

Prerequisites

Steps

# 1. Clone the repo
git clone https://github.com/Whatsonyourmind/deckforge && cd deckforge

# 2. Copy environment config (works out of the box for local dev)
cp .env.example .env

# 3. Start all services (API, workers, PostgreSQL, Redis, MinIO)
docker compose up -d

# 4. Initialize the database (runs migrations, seeds test user + API key)
bash scripts/bootstrap-db.sh

# 5. Verify the API is running
curl http://localhost:8000/v1/health
# => {"status":"healthy"}

The bootstrap script outputs a test API key (dk_test_...). Save it for the examples below.

API Examples

Render a deck from IR

curl -X POST http://localhost:8000/v1/render \
  -H "Authorization: Bearer dk_test_YOUR_KEY_HERE" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Q4 Board Update",
    "theme": "corporate-blue",
    "slides": [
      {
        "slide_type": "title_slide",
        "elements": [
          {"type": "title", "content": "Q4 2026 Board Update"},
          {"type": "subtitle", "content": "Acme Corp -- Confidential"}
        ]
      },
      {
        "slide_type": "stats_callout",
        "elements": [
          {"type": "title", "content": "Key Metrics"},
          {"type": "metric", "content": "$4.2M", "label": "ARR"},
          {"type": "metric", "content": "142%", "label": "YoY Growth"},
          {"type": "metric", "content": "94%", "label": "Retention"}
        ]
      }
    ]
  }' \
  --output board-update.pptx

Generate a deck from natural language

curl -X POST http://localhost:8000/v1/generate \
  -H "Authorization: Bearer dk_test_YOUR_KEY_HERE" \
  -H "Content-Type: application/json" \
  -d '{
    "prompt": "Create a 10-slide pitch deck for a B2B SaaS startup in the cybersecurity space, Series A, $2M ARR",
    "theme": "executive-dark",
    "output_format": "pptx"
  }' \
  --output pitch-deck.pptx

Note: The /v1/generate endpoint requires at least one LLM API key configured in .env (Anthropic, OpenAI, Gemini, or Ollama).

Check available themes and slide types

# List all 15 themes
curl http://localhost:8000/v1/themes

# List all 32 slide types with example IR
curl http://localhost:8000/v1/slide-types

# Estimate credit cost before rendering
curl -X POST http://localhost:8000/v1/estimate \
  -H "Authorization: Bearer dk_test_YOUR_KEY_HERE" \
  -H "Content-Type: application/json" \
  -d '{"slides": [{"slide_type": "title_slide"}, {"slide_type": "chart_slide"}]}'

TypeScript SDK

Install from npm:

npm install @deckforge/sdk

Fluent builder with full type safety:

import { DeckForge, Presentation, Slides } from "@deckforge/sdk";

const client = new DeckForge({ apiKey: "dk_test_YOUR_KEY_HERE" });

const deck = Presentation.create("Q4 Board Update", "corporate-blue")
  .addSlide(
    Slides.titleSlide({
      title: "Q4 2026 Board Update",
      subtitle: "Acme Corp -- Confidential",
    })
  )
  .addSlide(
    Slides.statsCallout({
      title: "Key Metrics",
      metrics: [
        { value: "$4.2M", label: "ARR" },
        { value: "142%", label: "YoY Growth" },
        { value: "94%", label: "Retention" },
      ],
    })
  );

const pptx = await client.render(deck);
// => Buffer containing .pptx file

Generate from a prompt with SSE streaming:

const stream = client.generate({
  prompt: "Create a PE deal memo for a $500M LBO of a healthcare platform",
  theme: "finance-pro",
});

for await (const event of stream) {
  console.log(`${event.stage}: ${event.message}`);
}
// intent: Analyzing prompt for presentation structure...
// outline: Creating 12-slide deal memo outline...
// expand: Generating slide content...
// refine: Running QA pipeline (5 passes)...
// complete: Deck ready for download

Architecture

                        +------------------+
                        |    Clients       |
                        |  (curl/SDK/MCP)  |
                        +--------+---------+
                                 |
                        +--------v---------+
                        |  FastAPI (uvicorn)|
                        |  /v1/* routes     |
                        |  Auth + Rate Limit|
                        |  Credit Billing   |
                        +--+-----+------+--+
                           |     |      |
               +-----------+     |      +----------+
               |                 |                  |
      +--------v------+  +------v--------+  +------v--------+
      | Content Worker |  | Render Worker |  |   Sync Path   |
      | (ARQ + Redis)  |  | (ARQ + Redis) |  | (< 10 slides) |
      | NL -> IR       |  | IR -> PPTX    |  | Direct return  |
      +--------+------+  +------+--------+  +------+--------+
               |                 |                  |
               v                 v                  v
      +--------+------+  +------+---------+  +-----+--------+
      | LLM Adapters  |  | PPTX Renderer  |  | Google Slides|
      | Claude/GPT/   |  | Layout Engine  |  | Renderer     |
      | Gemini/Ollama  |  | Theme Resolver |  | (OAuth)      |
      +---------------+  | Chart Renderer |  +--------------+
                          | QA Pipeline    |
                          +------+---------+
                                 |
                          +------v---------+
                          |    Storage     |
                          | MinIO (dev)    |
                          | R2/S3 (prod)   |
                          +----------------+

      +----------------+  +----------------+
      |   PostgreSQL   |  |     Redis      |
      |   Users, Keys  |  |  Queue, Cache  |
      |   Jobs, Decks  |  |  Rate Limits   |
      |   Billing      |  |  SSE Pub/Sub   |
      +----------------+  +----------------+

API Routes

All routes are mounted under the /v1 prefix. Interactive docs at http://localhost:8000/docs.

EndpointMethodAuthDescription
/v1/healthGETNoHealth check
/v1/renderPOSTAPI keyRender IR to PPTX/Google Slides
/v1/generatePOSTAPI keyGenerate slides from natural language
/v1/previewPOSTAPI keyGenerate thumbnail PNGs
/v1/estimatePOSTAPI keyEstimate credit cost
/v1/jobs/{id}GETAPI keyCheck async job status
/v1/themesGETNoList available themes
/v1/slide-typesGETNoList slide types with examples
/v1/decksGET/POST/DELETEAPI keyDeck CRUD operations
/v1/batchPOSTAPI keyBatch render multiple decks
/v1/webhooksGET/POST/DELETEAPI keyManage webhook subscriptions
/v1/billing/*VariousAPI keyStripe subscription management
/v1/pricingGETNoCurrent pricing and tier info
/v1/onboard/signupPOSTNoCreate account and API key
/v1/analytics/*GETAdminUsage analytics and metrics
/v1/auth/google/*GETAPI keyGoogle OAuth flow for Slides

Environment Variables

All variables are prefixed with DECKFORGE_. See .env.example for the complete reference with comments and example values.

VariableDefaultDescription
DECKFORGE_DATABASE_URLpostgresql+psycopg://...localhostPostgreSQL connection string
DECKFORGE_REDIS_URLredis://localhost:6379/0Redis connection (queue, cache, pub/sub)
DECKFORGE_S3_ENDPOINT_URLhttp://localhost:9000S3-compatible storage endpoint
DECKFORGE_S3_ACCESS_KEYminioadminS3 access key (MinIO default for dev)
DECKFORGE_S3_SECRET_KEYminioadminS3 secret key
DECKFORGE_S3_BUCKETdeckforgeS3 bucket name
DECKFORGE_API_HOST0.0.0.0API bind address
DECKFORGE_API_PORT8000API port
DECKFORGE_DEBUGtrueDebug mode (disable in production)
DECKFORGE_ENVIRONMENTdevelopmentdevelopment / staging / production
DECKFORGE_LLM_DEFAULT_PROVIDERclaudeDefault LLM for content generation
DECKFORGE_LLM_FALLBACK_CHAINclaude,openai,geminiLLM fallback order
DECKFORGE_ANTHROPIC_API_KEY--Anthropic API key for Claude
DECKFORGE_OPENAI_API_KEY--OpenAI API key
DECKFORGE_GEMINI_API_KEY--Google Gemini API key
DECKFORGE_OLLAMA_BASE_URLhttp://localhost:11434Ollama local server URL
DECKFORGE_STRIPE_SECRET_KEY--Stripe secret key
DECKFORGE_STRIPE_WEBHOOK_SECRET--Stripe webhook signing secret
DECKFORGE_STRIPE_STARTER_PRICE_ID--Stripe price ID for Starter tier
DECKFORGE_STRIPE_PRO_PRICE_ID--Stripe price ID for Pro tier
DECKFORGE_GOOGLE_CLIENT_ID--Google OAuth client ID (for Slides)
DECKFORGE_GOOGLE_CLIENT_SECRET--Google OAuth client secret
DECKFORGE_GOOGLE_REDIRECT_URIhttp://localhost:8000/v1/auth/google/callbackOAuth redirect URI
DECKFORGE_UNKEY_ROOT_KEY--Unkey root key (production auth)
DECKFORGE_UNKEY_API_ID--Unkey API ID
DECKFORGE_X402_ENABLEDfalseEnable x402 USDC payments
DECKFORGE_X402_WALLET_ADDRESS--USDC receiving wallet on Base
DECKFORGE_X402_FACILITATOR_URLhttps://x402.org/facilitatorx402 facilitator endpoint
DECKFORGE_X402_NETWORKeip155:8453Base Mainnet chain ID

Deployment

Fly.io (Recommended)

DeckForge ships with a production-ready fly.toml and multi-stage Dockerfile.

# 1. Install Fly CLI
curl -L https://fly.io/install.sh | sh

# 2. Login and launch
fly auth login
fly launch --name deckforge-api --region iad

# 3. Provision PostgreSQL
fly postgres create --name deckforge-db --region iad
fly postgres attach deckforge-db

# 4. Provision Redis (via Upstash or Fly Redis)
fly redis create --name deckforge-redis
# Copy the REDIS_URL from output

# 5. Set production secrets
fly secrets set \
  DECKFORGE_ENVIRONMENT=production \
  DECKFORGE_DEBUG=false \
  DECKFORGE_DATABASE_URL="postgres://..." \
  DECKFORGE_REDIS_URL="redis://..." \
  DECKFORGE_S3_ENDPOINT_URL="https://..." \
  DECKFORGE_S3_ACCESS_KEY="..." \
  DECKFORGE_S3_SECRET_KEY="..." \
  DECKFORGE_S3_BUCKET="deckforge" \
  DECKFORGE_STRIPE_SECRET_KEY="sk_live_..." \
  DECKFORGE_STRIPE_WEBHOOK_SECRET="whsec_..." \
  DECKFORGE_ANTHROPIC_API_KEY="sk-ant-..."

# 6. Deploy
fly deploy

# 7. Run database migrations
fly ssh console -C "alembic upgrade head"

# 8. Verify
curl https://deckforge-api.fly.dev/v1/health

Fly.io configuration highlights:

  • 2 shared CPUs, 1 GB RAM per VM
  • Auto-stop/start for cost efficiency (min 1 machine running)
  • Forced HTTPS with concurrency limits (200 soft / 250 hard)
  • Multi-process: api (uvicorn) + worker (ARQ)

Docker Compose (Local Development)

# Start all 6 services
docker compose up -d

# Services:
#   api             - FastAPI + uvicorn (port 8000)
#   content-worker  - ARQ worker for NL-to-IR generation
#   render-worker   - ARQ worker for IR-to-PPTX rendering
#   postgres        - PostgreSQL 16 (port 5432)
#   redis           - Redis 7 (port 6379)
#   minio           - MinIO S3-compatible storage (port 9000, console 9001)

# Check service health
docker compose ps

# View API logs
docker compose logs -f api

# Tear down (preserves data volumes)
docker compose down

# Full reset (removes data)
docker compose down -v

S3 Storage Options

EnvironmentProviderConfig
Local devMinIO (via Docker Compose)Default .env.example values
ProductionCloudflare R2Set S3_ENDPOINT_URL, S3_ACCESS_KEY, S3_SECRET_KEY
ProductionAWS S3Set S3_ENDPOINT_URL to AWS endpoint
Fly.ioFly Tigrisfly storage create, auto-configured

Pricing

Subscription Tiers

TierPriceCredits/monthRate LimitBest For
StarterFree5010 req/minEvaluation, hobby projects
Pro$79/month50060 req/minTeams, production apps
EnterpriseCustom10,000+300 req/minHigh-volume, overage allowed

Credit Cost

Each API call consumes credits based on complexity:

  • Simple render (< 5 slides): 1 credit
  • Standard render (5-20 slides): 2-3 credits
  • Complex render (charts, finance slides): 3-5 credits
  • Content generation (NL-to-IR): +2 credits (LLM usage)

x402 Per-Call Pricing (AI Agents)

For autonomous AI agents that prefer pay-per-call over subscriptions:

EndpointUSDC PriceNetwork
/v1/render$0.05Base L2
/v1/generate$0.15Base L2
Metadata endpointsFree--

x402 payments bypass rate limiting (per-call payment is self-throttling).

Demo Decks

Five production-quality demo IRs in demos/:

DemoSlidesThemeUse Case
McKinsey Strategy12corporate-blueStrategy consulting deck
PE Deal Memo10finance-proPrivate equity investment committee
Startup Pitch12modern-gradientSeries A fundraising
Board Update8executive-darkQuarterly board meeting
Product Launch10tech-neonProduct launch announcement

Render any demo:

curl -X POST http://localhost:8000/v1/render \
  -H "Authorization: Bearer dk_test_YOUR_KEY_HERE" \
  -H "Content-Type: application/json" \
  -d @demos/mckinsey-strategy/ir.json \
  --output mckinsey-strategy.pptx

Integrations

MCP Server (AI Agents)

DeckForge includes a Model Context Protocol server with 6 tools:

{
  "mcpServers": {
    "deckforge": {
      "command": "python",
      "args": ["-m", "deckforge.mcp"]
    }
  }
}

Tools: render, generate, themes, slide_types, estimate, preview

Agent Framework Support

  • LangChain -- render + generate tool classes
  • CrewAI -- unified tool with action parameter
  • AutoGen -- plain function tools with Annotated types

See demos/ for integration examples.

Links

Contributing

  1. Fork the repo
  2. Create a feature branch (git checkout -b feature/my-feature)
  3. Run tests (pytest for Python, cd sdk && npm test for TypeScript)
  4. Commit and push
  5. Open a Pull Request

License

MIT


DeckForge -- Executive-ready slides, one API call away.

Reviews

No reviews yet

Sign in to write a review