Slidefast MCP Server
An MCP (Model Context Protocol) server and a slidefast CLI that wrap the
Slidefast public API, so AI assistants and shell scripts can create,
edit, review, export and publish AI carousels through the same client.
Features
- Create presentations - Start new presentations with custom themes
- AI-powered slide generation - Chat with AI to generate and modify slides
- Projects - Scope every list and create call to one client workspace
- Client review links - No-login approval URLs, with the comment thread (Agency plan)
- Export options - Export to PDF, PNG ZIP, or individual slide PNGs
- Full CRUD operations - Get, update, and delete presentations
- Sharing and metadata - Enable share links and generate social metadata
- Theme, brand kit and media management - Manage themes and library images
- Social publishing - Post carousels to LinkedIn, TikTok (draft or live), Facebook Pages and Instagram
- Rate limit monitoring - Check your API usage
Installation
Option 1: Local Mode (stdio transport)
Install the package:
pip install slidefast-mcp
# or with uv
uv pip install slidefast-mcp
Or run directly with uvx (no install needed):
uvx slidefast-mcp
Option 2: Remote Mode (Streamable HTTP)
Connect to the hosted server at https://mcp.slidefast.io/mcp (no installation required). OAuth-capable clients discover Slidefast's OAuth 2.1 server automatically and open browser sign-in on first use.
Configuration
Getting Your API Key
- Go to slidefast.io
- Sign in to your account
- Navigate to Settings > API Keys
- Create a new API key
Claude Desktop Configuration
Local Mode
Add to your Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json on macOS):
{
"mcpServers": {
"slidefast": {
"command": "uvx",
"args": ["slidefast-mcp"],
"env": {
"SLIDEFAST_API_KEY": "sk-sf-your-api-key"
}
}
}
}
Or if installed via pip:
{
"mcpServers": {
"slidefast": {
"command": "slidefast-mcp",
"env": {
"SLIDEFAST_API_KEY": "sk-sf-your-api-key"
}
}
}
}
Remote Mode
{
"mcpServers": {
"slidefast": {
"url": "https://mcp.slidefast.io/mcp"
}
}
}
Legacy clients without OAuth discovery may continue to send Authorization: Bearer sk-sf-your-api-key.
Claude Code Configuration
For Claude Code CLI, add to your MCP settings:
{
"mcpServers": {
"slidefast": {
"command": "uvx",
"args": ["slidefast-mcp"],
"env": {
"SLIDEFAST_API_KEY": "sk-sf-your-api-key"
}
}
}
}
CLI
The same package installs a slidefast command. It talks to the same public API with the
same key, and every subcommand takes --json for machine-readable output.
uv tool install slidefast-mcp # or: pipx install slidefast-mcp
slidefast auth login --api-key sk-sf-... # verified, then stored in ~/.slidefast/config.json
slidefast projects list
slidefast presentations create "5 hiring myths"
slidefast chat <deck-id> "8-slide carousel on hiring myths for founders"
slidefast chat <deck-id> "tighten slide 3" # dry run: prints unsaved suggestions
slidefast chat <deck-id> "tighten slide 3" --apply # writes it
slidefast review-link <deck-id> create # client approval URL
slidefast presentations export <deck-id> --format pdf
slidefast publish <deck-id> --platform linkedin
Global flags, accepted before or after the subcommand: --json, --project <uuid>,
--api-key, --base-url. Exit codes: 0 success, 1 API or config error, 2 bad usage.
Projects
Presentations, themes, brand kits and social accounts all live inside a project (one per client). List and create calls resolve a project in this order:
- the API key's pin, if it has one (set in the dashboard under Settings > API Keys). A
pinned key is a hard boundary: a conflicting
project_idis rejected with 403. - the per-call
project_idargument (X-Project-Idheader), for unpinned keys. - the account's default project.
Every project-scoped tool takes an optional project_id, deliberately per call rather than a
stateful "active project" - agent callers are stateless and often concurrent. Row access by id
is never project-scoped, so reading a deck you own always works.
Available Tools
| Tool | Description |
|---|---|
slidefast_check_rate_limit |
Check your API usage and limits |
slidefast_get_usage |
Get monthly usage stats by resource |
slidefast_get_me |
Get the authenticated user profile |
slidefast_list_projects |
List projects (client workspaces) |
slidefast_create_project |
Create a project |
slidefast_get_active_project |
Which project this call would act in |
slidefast_list_presentations |
List presentations with pagination, sorting, and tag filters |
slidefast_create_presentation |
Create a new presentation |
slidefast_get_presentation_tags |
List distinct presentation tags |
slidefast_get_presentation |
Get presentation by ID |
slidefast_update_presentation |
Update presentation (title, slides, theme, tags, status) |
slidefast_duplicate_presentation |
Duplicate a presentation |
slidefast_delete_presentation |
Delete a presentation |
slidefast_enable_share |
Enable public sharing for a presentation |
slidefast_disable_share |
Disable public sharing for a presentation |
slidefast_generate_share_metadata |
Generate platform-specific social metadata |
slidefast_update_share_metadata |
Manually update metadata for one platform |
slidefast_chat |
Chat with AI to generate/modify slides |
slidefast_get_chat_history |
Get conversation history |
slidefast_clear_chat_history |
Clear conversation history |
slidefast_translate_slides |
Translate slides to another language |
slidefast_export_png_zip |
Export all slides as PNG ZIP (returns download URL) |
slidefast_export_pdf |
Export as PDF (returns download URL) |
slidefast_export_slide_png |
Export single slide as PNG (returns download URL) |
slidefast_list_themes |
List themes |
slidefast_create_theme |
Create a theme |
slidefast_get_theme |
Get a theme |
slidefast_update_theme |
Update a theme |
slidefast_delete_theme |
Delete a theme |
slidefast_duplicate_theme |
Duplicate a theme |
slidefast_set_default_theme |
Set the default theme |
slidefast_get_brand_kit |
The project's colours, fonts and logos |
slidefast_list_library_images |
List library images |
slidefast_search_library_images |
Semantic search over library images |
slidefast_upload_library_image |
Upload a base64-encoded image to the library |
slidefast_generate_background_image |
Generate AI background photos into the library |
slidefast_delete_library_image |
Delete a library image |
slidefast_upload_presentation_image |
Upload a base64-encoded image for slides |
slidefast_get_social_connections |
Which platforms are connected, and the targets you can publish to |
slidefast_publish_linkedin |
Publish a carousel to a LinkedIn profile or Page (public) |
slidefast_publish_tiktok |
Publish a carousel to TikTok — draft to the creator's inbox by default |
slidefast_publish_meta |
Publish a carousel to a Facebook Page or Instagram (public) |
slidefast_list_social_posts |
History of every publish attempt |
slidefast_get_social_post |
Poll one publish attempt to completion |
slidefast_get_tiktok_publish_status |
Ask TikTok directly about a publish_id |
slidefast_get_review_link |
The deck's client review link, or null |
slidefast_create_review_link |
Create a no-login client approval URL (Agency plan) |
slidefast_rotate_review_link |
New token, killing the URL already sent |
slidefast_revoke_review_link |
Revoke the review link |
slidefast_get_review_thread |
Review status plus every client comment |
Social Publishing
Publishing is asynchronous. A publish tool returns a social post record straight away with
status: "pending"; poll slidefast_get_social_post until it reads published or failed.
What goes public, and what does not:
| Tool | Result |
|---|---|
slidefast_publish_tiktok with mode="MEDIA_UPLOAD" (default) |
Draft. The slides land in the creator's TikTok inbox. Nothing is public until they post it from the TikTok app. |
slidefast_publish_tiktok with mode="DIRECT_POST" |
Live immediately. Requires a privacy_level from creator_info.privacy_level_options. |
slidefast_publish_linkedin |
Live immediately. LinkedIn has no draft mode. |
slidefast_publish_meta |
Live immediately. Facebook and Instagram have no draft mode here. |
Call slidefast_get_social_connections first: it returns the LinkedIn profile and Page targets,
the connected TikTok accounts with the privacy options a direct post may use, and the Facebook
Page / Instagram destination_id values. Access tokens are never returned.
Connecting an account is a browser OAuth flow and cannot be done over the API or MCP. An
unconnected platform answers 409 with a connect_url — pass that URL to the user so they can
click Connect in the Slidefast web app.
Publishing is rate limited to 12 attempts per hour, and every attempt is recorded in
slidefast_list_social_posts whether it succeeded or not. Pass the same idempotency_key when
retrying so a flaky connection cannot post twice.
Chat: dry run vs apply
slidefast_chat (and slidefast chat) takes a mode:
default- a dry run for edits. Changes to existing slides come back assuggestions[]and are not saved. Re-send the same message withmode="apply"to commit them.apply- the edits are written and returned aschanges[].- The exception: a turn that writes a whole deck ("make me a carousel about X") is saved
in either mode, because a creation is not a proposal. The response says
slides_generated: true.
Each turn costs one AI message against the monthly quota in both modes.
Tool Parameter Notes
MCP clients can pass structured objects directly for slides, theme, display_settings, slides_context, and theme payloads. Legacy JSON strings are still accepted for compatibility.
Image upload tools accept base64-encoded image bytes plus filename and content_type. For example:
{
"image_base64": "iVBORw0KGgo...",
"filename": "brand-mark.png",
"content_type": "image/png"
}
slidefast_chat supports slide_count, emoji_mode, hook_categories, and mode. Use mode: "apply" when you want suggested edits applied directly to the presentation.
Usage Examples
Create a Presentation and Generate Slides
User: Create a presentation about climate change and generate 5 slides
Claude: I'll create a presentation and generate slides about climate change.
[Uses slidefast_create_presentation to create "Climate Change" presentation]
[Uses slidefast_chat with the message "Create 5 slides about climate change, its causes, effects, and solutions"]
Export a Presentation
User: Export my presentation as PDF
Claude: I'll export your presentation as a PDF.
[Uses slidefast_export_pdf with the presentation ID]
[Returns: { url: "https://cdn.slidefast.io/exports/.../presentation.pdf", filename: "My Presentation.pdf", size: 123456 }]
Modify Existing Slides
User: Make the second slide more engaging
Claude: I'll ask the AI to improve the second slide.
[Uses slidefast_chat with "Make slide 2 more engaging with better copy"]
Send a Carousel to TikTok as a Draft
User: Send my latest carousel to TikTok so I can review it before posting
Claude: I'll upload it to your TikTok inbox as a draft — nothing will be public.
[Uses slidefast_get_social_connections to confirm TikTok is connected]
[Uses slidefast_publish_tiktok with the default mode="MEDIA_UPLOAD"]
[Uses slidefast_get_social_post to poll until status is "published"]
[Reports: the draft is waiting in your TikTok inbox — open the app to post it]
Publish to a LinkedIn Page
User: Post this carousel on our company page
Claude: That will go live on the Page immediately — confirming before I post.
[Uses slidefast_get_social_connections to find the organization target]
[Uses slidefast_publish_linkedin with destination_type="organization" and the organization_id]
[Uses slidefast_get_social_post to poll, then returns the external_post_url]
Slide Types
When creating or modifying slides, these types are available:
cover- Title/cover slidecontent- General content slidequote- Quote with attributioncta- Call-to-action slidestat- Statistics highlightcomparison- Side-by-side comparisonsteps- Step-by-step processfeature- Feature highlightbullet-list- Bulleted listbig-text- Large text emphasis
Theme Configuration
Themes require these fields (all colors in #RRGGBB format):
{
"id": "custom-theme",
"name": "My Theme",
"background": "#FFFFFF",
"accent": "#3B82F6",
"text": "#1F2937",
"textSecondary": "#6B7280",
"borderColor": "#E5E7EB"
}
Self-Hosting the Remote Server
To run your own remote MCP server:
- Clone the repository
- Build the Docker image:
cd slidefast-mcp docker build -t slidefast-mcp .
- Run the container:
docker run -p 8080:8080 slidefast-mcp
Or add to your docker-compose:
services:
mcp:
build:
context: ./slidefast-mcp
ports:
- "8080:8080"
environment:
- SLIDEFAST_API_BASE_URL=https://slidefast.io/api/v1/public
The remote server exposes:
GET /healthfor container and load balancer checksPOST /mcpfor Streamable HTTP MCP clients
For remote mode, clients should send the Slidefast API key as:
Authorization: Bearer sk-sf-your-api-key
For local stdio mode, set SLIDEFAST_API_KEY.
Environment Variables
| Variable | Description | Default |
|---|---|---|
SLIDEFAST_API_KEY |
Your Slidefast API key | Required for local mode |
SLIDEFAST_API_BASE_URL |
API base URL | https://slidefast.io/api/v1/public |
HOST |
Server host (remote mode) | 0.0.0.0 |
PORT |
Server port (remote mode) | 8080 |
Development
# Clone the repo
git clone https://github.com/lorisalx/slidefast-mcp.git
cd slidefast-mcp
# Install dev dependencies
pip install -e ".[dev]"
# Run tests
pytest
# or, when using uv:
uv run pytest
# Run locally
SLIDEFAST_API_KEY=sk-sf-xxx slidefast-mcp
Troubleshooting
No API key found: setSLIDEFAST_API_KEYfor stdio mode, or sendAuthorization: Bearer sk-sf-...for remote mode.Authentication failed: the key is missing, malformed, revoked, or belongs to another environment.Payment required/402: the account has reached a plan limit for presentations, exports, assets, or AI messages.Rate limit exceeded/429: wait for the API key rate limit window to reset or useslidefast_check_rate_limit.- Export tools return public CDN URLs when successful. These URLs are public, not expiring signed URLs.
License
MIT License - see LICENSE for details.
Links
- Slidefast - AI-powered presentation creator
- MCP Protocol - Model Context Protocol specification
- FastMCP - FastMCP framework documentation
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file slidefast_mcp-0.2.1.tar.gz.
File metadata
- Download URL: slidefast_mcp-0.2.1.tar.gz
- Upload date:
- Size: 88.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.8.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d00be86fc9b073c3ebfcfc3e0b4fd24635583ac36d8c46d37b420992b71eac5e
|
|
| MD5 |
078152a6b8999bfda53cc39384602aa9
|
|
| BLAKE2b-256 |
292dd723e14ad0487c49b0be39713bbdb1f342aeea0ba8771a3827c91e02f35c
|
File details
Details for the file slidefast_mcp-0.2.1-py3-none-any.whl.
File metadata
- Download URL: slidefast_mcp-0.2.1-py3-none-any.whl
- Upload date:
- Size: 36.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
uv/0.8.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2b1dcb251ebc841b19e3055bdadb6b9be9134d7b1eeb138b56b9699a8cf5770e
|
|
| MD5 |
6b5fc5d81f8318da0c068106f3159a05
|
|
| BLAKE2b-256 |
161fb8e75724f00138889267056bffa0bbd7c60b1d8be63720858fa41603a3b7
|