document-creation-mcp
This server is an AI-driven PowerPoint deck creation tool that generates .pptx files from structured slide plans, applies design themes, and auto-generates images via ComfyUI.
Create presentations (
create_presentation): Build a complete.pptxdeck from a JSON slide plan, automatically generating images for slides with prompts, embedding existing images from local paths or URLs, and applying a chosen design theme.List and inspect design themes (
list_themes,get_theme): Retrieve available themes (e.g.,dark_tech,corporate,minimal,academic) and their full definitions — color palettes, fonts, and image style descriptors.Generate individual images (
generate_image): Produce AI-generated images via a ComfyUI backend using a text prompt, with optional theme scoping, output size, negative prompt, and role (contentorbackground). Returns the local file path.Inspect ComfyUI models (
list_comfy_models): Query the ComfyUI HTTP API to discover available checkpoints, samplers, and schedulers.Highly configurable: Supports multiple image generation backends (remote ComfyUI MCP server or direct ComfyUI API) and server transports (stdio, SSE, streamable-http) via environment variables.
Docker support: Can be run in a Docker container or with Docker Compose.
Integrates with AI orchestrators: Designed to be called by tools like Open WebUI to execute document creation tasks.
Allows uploading generated .pptx files to a MinIO/S3 bucket, returning a direct link or presigned URL for retrieval, configurable via environment variables such as MINIO_ENDPOINT, MINIO_ACCESS_KEY, etc.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@document-creation-mcpCreate a 5-slide deck on quantum computing using the 'corporate' theme."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
document-creation-mcp
MCP server for AI-driven document creation, starting with PowerPoint decks.
The server is the execution layer: it builds .pptx files from a structured
slide plan, applies consistent design themes, and auto-generates images via your
existing ComfyUI MCP server. The orchestrating model (e.g. in Open WebUI) does
any web research and composes the slide plan, then calls these tools.
Tools
Tool | Purpose |
| List available design theme names. |
| Return a theme's colors/fonts/image-style. |
| Generate one image via ComfyUI MCP; returns local path. |
| Build a deck from a |
| List checkpoints/samplers/schedulers available on the ComfyUI HTTP API. |
create_presentation will auto-generate any image that has an image.prompt
(using ComfyUI), and embed existing files/URLs when image.source is set.
Related MCP server: office-mcp-server
Install
python -m venv .venv && source .venv/bin/activate
pip install -e .Configure (environment variables)
Variable | Default | Meaning |
|
| Where |
|
| Where generated images are cached. |
|
| Transport for the server itself: |
|
| Bind address when serving over HTTP/SSE. Defaults to localhost for security; set |
|
| Port the server listens on for |
|
| Endpoint path for |
|
| Run streamable-http in stateless mode (no session). Recommended behind proxies (MetaMCP/Open WebUI) to avoid |
| (bundled) | Directory of |
|
| Image source: |
MCP backend ( | ||
| (none) | Address of your running ComfyUI MCP server, e.g. |
| (none) | Bearer token sent as |
|
|
|
|
| Name of the image tool in that server. |
| (fallback) | Only used if |
Direct API backend ( | ||
| (none) | Base URL of the ComfyUI instance, e.g. |
| (none) | Optional bearer token for the ComfyUI endpoint. |
| (auto) | Checkpoint to load. When unset, auto-selected from installed checkpoints (SDXL-style preferred). |
|
| KSampler steps / CFG scale. |
|
| KSampler sampler / scheduler (auto-matched to installed values). |
|
| Seed ( |
|
| When enabled (default), the |
|
| Seconds to wait for image generation (both backends). |
|
| Skip all image generation. |
|
| When |
MinIO / S3 retrieval ( | ||
| (none) | MinIO/S3 endpoint, e.g. |
| (none) | S3 access key id / secret access key (the MinIO username / password). Set these to match the credentials used elsewhere (e.g. an n8n S3 node). Optional only for anonymous / proxy-authenticated instances. |
|
| Target bucket (created if missing). A |
|
| Use HTTPS to the endpoint (usually |
|
| Region (default |
| (none) | If set (e.g. |
|
| Set |
|
| Upload objects with a public-read grant so browsers / Open WebUI can fetch them directly (same as n8n's S3 |
|
| Lifetime (hours) of the presigned URL when no public URL is set. |
| (none) | Object-name prefix inside the bucket, e.g. |
Run
document-creation-mcp # stdio transport (recommended for Open WebUI)
# or: python -m document_creation_mcp.serverDocker
Build and run the server inside a container.
# Build the image
docker build -t document-creation-mcp .
# Run with streamable-http transport (default in the Dockerfile)
docker run -p 8000:8000 \
-e COMFY_MCP_COMMAND='["python","-m","comfy_mcp_server"]' \
-v "$(pwd)/output:/app/output" \
document-creation-mcpOr use the provided Compose file:
docker compose up --buildThe container serves on port 8000 using streamable-http by default. Generated
.pptx files are written to /app/output (mount ./output to retrieve them).
Override DOC_MCP_TRANSPORT=stdio if you instead want the container spawned as a
stdio MCP server by its parent.
Open WebUI setup
Start your ComfyUI MCP server separately (the command above must reach it).
In Open WebUI → Admin → Tools → Add MCP server, point at this server (stdio command:
document-creation-mcp, or an SSE URL if you wrap it).The model can now call
create_presentation(after doing web search and drafting the plan) andgenerate_imagefor bespoke visuals.
When running this server in Docker, register it as an HTTP/SSE MCP server
pointing at http://<host>:8000/mcp (streamable-http) or /sse instead of the
stdio command.
Connecting over HTTP (Open WebUI / MetaMCP)
The server only listens for
sse/streamable-httpwhenDOC_MCP_TRANSPORTis set to one of those (the Docker image defaults tostreamable-http).It must be reachable from the client: set
DOC_MCP_HOST=0.0.0.0and publish the port (e.g.ports: ["3335:3335"]in Compose withDOC_MCP_PORT=3335). AConnection refusedmeans the container isn't up, isn't on that port, or is bound to127.0.0.1.The client URL must include the endpoint path:
default →
http://<host>:<port>/mcpif your client POSTs to the server root (some MetaMCP setups do), set
DOC_MCP_STREAMABLE_HTTP_PATH=/and usehttp://<host>:<port>/.A
404 Not Foundon a POST means the path didn't match — adjustDOC_MCP_STREAMABLE_HTTP_PATHor add/mcpto the URL. Intermittent404s on/mcp(especially from different client IPs) are usually stateful-session rejects from a proxy; setDOC_MCP_STATELESS_HTTP=true(the default) so each request is handled without a session.
Retrieving generated files
create_presentation writes the .pptx to DOC_MCP_OUTPUT_DIR and returns its
path. Because the server runs in a container, that path is internal — to get the
file:
MinIO (best for shared access): set
MINIO_ENDPOINT(with keys). The tool uploads the file and returns adownload.url— a direct link ifMINIO_PUBLIC_URLis set, otherwise a presigned GET URL. Anyone with the link can fetch the deck; the container needs theminioextra installed (the Docker image includes it).Base64 (no infra): keep
DOC_MCP_RETURN_BASE64=true(default). The tool result includes adownloadfield withfilename,mime_typeand base64data. Save/decode that to get the file through the chat client (Open WebUI).Mounted volume: mount
DOC_MCP_OUTPUT_DIR(the Compose file mounts./output:/app/output) and read./output/<name>.pptxfrom the host, then setDOC_MCP_RETURN_BASE64=falseto avoid the base64 in context.
The download object may contain any combination of url, data and
minio_error (if an upload failed but the deck was still built).
Themes
Factory themes ship inside the package at src/document_creation_mcp/themes/*.yaml
(dark_tech, corporate, minimal, academic), so they are always available
after install, including in Docker.
name: dark_tech
colors:
background: "#0B0E14"
primary: "#4F8CFF"
accent: "#00E0C6"
text: "#E6EAF2"
muted: "#8A93A6"
fonts:
heading: "Montserrat"
body: "Inter"
image_style: "cinematic, neon accents, dark moody background, 8k, highly detailed"
layout_default: title_and_content
logo: nullimage_style is appended to every generated image prompt for visual consistency.
Add or override themes: set DOC_MCP_THEME_DIR to a directory of *.yaml
files (e.g. a mounted volume in Docker). Its themes are merged on top of the
bundled ones, so a file with the same name overrides a factory theme.
Note:
style_reference_image/controlnet.reference_imagepaths are resolved at runtime — in Docker, mount those assets and use absolute paths (or paths relative to the container working directory). The optional advanced workflowCOMFY_API_WORKFLOWsimilarly needs to be mounted into the container.
To refresh after editing theme files, the server reloads them on startup; there
is also a list_themes() tool to confirm what is loaded.
Automatic, consistent image generation (no workflow files)
IMAGE_BACKEND=comfy_api drives ComfyUI directly and needs no workflow
JSON. On first generation it queries the instance's /object_info to discover
every installed model — checkpoints, VAE, LoRA, ControlNet, IP-Adapter,
CLIP-Vision and upscalers — then assembles a consistency pipeline in code using
only what is present:
Checkpoint ─► [IP-Adapter] ─► [ControlNet] ─► KSampler ─► VAEDecode
│
[Upscale] ─► SaveImageBracketed nodes are inserted conditionally, so a bare text-to-image graph is used when only a checkpoint is available, and the full IP-Adapter + ControlNet + upscale pipeline kicks in automatically as more models are installed. There is nothing to configure by hand.
What to install (more = more consistent)
Purpose | Suggested model(s) | Effect when present |
Base checkpoint |
| Auto-selected (SDXL-style preferred). |
VAE |
| Auto-loaded if found. |
CLIP Vision |
| Enables IP-Adapter. |
IP-Adapter |
| Locks every slide to one deck-wide style. |
ControlNet |
| Keeps subjects off-centre so text stays readable. |
Upscaler |
| Sharper projector-grade output. |
Custom nodes |
| Provide the IP-Adapter / ControlNet nodes. |
How consistency is enforced
Auto style reference. If a theme sets
style_reference_imageit is used; otherwise the backend generates one anchor image per deck from the theme'simage_styleand feeds it to IP-Adapter, so all slides share a look with no supplied asset.Per-role presets (
ImageSpec.target):background→ stronger ControlNet + auto dim/blur post-process for legibility.content→ balanced style + composition lock.icon→ lighter composition control, placed as a small top-right asset.
Shared negative prompt + palette. The deck/theme
negative_promptand the themeimage_stylesuffix are applied to every prompt.Graceful degradation. Missing ControlNet / IP-Adapter / upscaler → that stage is skipped; the graph always submits successfully.
Optional theme tuning
name: dark_tech
image_style: "cinematic, neon accents, dark moody background, 8k, highly detailed"
style_reference_image: "themes/refs/dark_tech_style.png" # optional; auto-generated if omitted
ip_adapter_weight: 0.7
ip_adapter_weight_type: null # optional; omit so the node uses its own default
# (enum varies between IP-Adapter versions)
controlnet:
enabled: true
type: depth # depth | canny | openpose | tile
strength: 0.6
reference_image: "themes/refs/dark_tech_comp.png"
upscale_model: "4x-UltraSharp.pth" # optional; auto-selected if omitted
negative_prompt: "watermark, text, blurry, low quality, jpeg artifacts"
background_post: "dim" # light blur + dark overlay so text stays readableSet COMFY_API_AUTODISCOVER=false only if you want to pin specific model names
via the COMFY_API_* env vars instead of auto-detection.
Slide plan schema
create_presentation takes the plan as a JSON object (not a string). Slide
text is given as bullets (a list of strings) or content (a string, which is
split on newlines, or a list).
{
"title": "Deck title",
"theme": "dark_tech",
"output_filename": "my_deck",
"bucket": "presentations",
"slides": [
{"title": "Intro", "layout": "title", "subtitle": "An AI deck"},
{"title": "Topic", "bullets": ["Point 1"], "image": {"prompt": "futuristic city"}},
{"title": "Deep dive", "layout": "image_full", "image": {"prompt": "data flow"}}
]
}Layouts: title, title_and_content, two_column, image_full, section.
The optional bucket field sets the MinIO bucket for this deck (overrides
MINIO_BUCKET env).
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseAquality-maintenanceAn MCP server that enables AI agents to instantly convert Markdown into beautiful, ready-to-deliver Word, PDF, HTML with sidebars, and Slideshow documents, bridging the "last mile" of AI content generation.Last updated7281
- Flicense-qualityBmaintenanceMCP server for Office document automation, enabling AI assistants to create, read, and clone Word/Excel/PPT templates while preserving formatting.Last updated1
- AlicenseAqualityDmaintenanceMCP server for Word document (.docx) creation and manipulation — the production-grade document automation tool for AI agents.Last updated961MIT
- Alicense-qualityDmaintenanceEnables creation of professional PowerPoint presentations with AI-generated content and images, supporting multiple LLMs and image services via MCP protocol.Last updatedMIT
Related MCP Connectors
Presentations.AI MCP server — create designed slide decks from a topic, text, or document.
MCP server for Wan AI video generation
MCP server for Luma Dream Machine AI video generation
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/TheRealChickenlegs/document-creation-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server