{
  "markdown": "# Slidefast MCP Server\n\n<!-- mcp-name: io.slidefast/slidefast -->\n\nAn MCP (Model Context Protocol) server **and a `slidefast` CLI** that wrap the\n[Slidefast](https://slidefast.io) public API, so AI assistants and shell scripts can create,\nedit, review, export and publish AI carousels through the same client.\n\n## Features\n\n- **Create presentations** - Start new presentations with custom themes\n- **AI-powered slide generation** - Chat with AI to generate and modify slides\n- **Projects** - Scope every list and create call to one client workspace\n- **Client review links** - No-login approval URLs, with the comment thread (Agency plan)\n- **Export options** - Export to PDF, PNG ZIP, or individual slide PNGs\n- **Full CRUD operations** - Get, update, and delete presentations\n- **Sharing and metadata** - Enable share links and generate social metadata\n- **Theme, brand kit and media management** - Manage themes and library images\n- **Social publishing** - Post carousels to LinkedIn, TikTok (draft or live), Facebook Pages and Instagram\n- **Rate limit monitoring** - Check your API usage\n\n## Installation\n\n### Option 1: Local Mode (stdio transport)\n\nInstall the package:\n\n```bash\npip install slidefast-mcp\n# or with uv\nuv pip install slidefast-mcp\n```\n\nOr run directly with uvx (no install needed):\n\n```bash\nuvx slidefast-mcp\n```\n\n### Option 2: Remote Mode (Streamable HTTP)\n\nConnect 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.\n\n## Configuration\n\n### Getting Your API Key\n\n1. Go to [slidefast.io](https://slidefast.io)\n2. Sign in to your account\n3. Navigate to Settings > API Keys\n4. Create a new API key\n\n### Claude Desktop Configuration\n\n#### Local Mode\n\nAdd to your Claude Desktop config (`~/Library/Application Support/Claude/claude_desktop_config.json` on macOS):\n\n```json\n{\n  \"mcpServers\": {\n    \"slidefast\": {\n      \"command\": \"uvx\",\n      \"args\": [\"slidefast-mcp\"],\n      \"env\": {\n        \"SLIDEFAST_API_KEY\": \"sk-sf-your-api-key\"\n      }\n    }\n  }\n}\n```\n\nOr if installed via pip:\n\n```json\n{\n  \"mcpServers\": {\n    \"slidefast\": {\n      \"command\": \"slidefast-mcp\",\n      \"env\": {\n        \"SLIDEFAST_API_KEY\": \"sk-sf-your-api-key\"\n      }\n    }\n  }\n}\n```\n\n#### Remote Mode\n\n```json\n{\n  \"mcpServers\": {\n    \"slidefast\": {\n      \"url\": \"https://mcp.slidefast.io/mcp\"\n    }\n  }\n}\n```\n\nLegacy clients without OAuth discovery may continue to send `Authorization: Bearer sk-sf-your-api-key`.\n\n### Claude Code Configuration\n\nFor Claude Code CLI, add to your MCP settings:\n\n```json\n{\n  \"mcpServers\": {\n    \"slidefast\": {\n      \"command\": \"uvx\",\n      \"args\": [\"slidefast-mcp\"],\n      \"env\": {\n        \"SLIDEFAST_API_KEY\": \"sk-sf-your-api-key\"\n      }\n    }\n  }\n}\n```\n\n## CLI\n\nThe same package installs a `slidefast` command. It talks to the same public API with the\nsame key, and every subcommand takes `--json` for machine-readable output.\n\n```bash\nuv tool install slidefast-mcp     # or: pipx install slidefast-mcp\n\nslidefast auth login --api-key sk-sf-...   # verified, then stored in ~/.slidefast/config.json\nslidefast projects list\nslidefast presentations create \"5 hiring myths\"\nslidefast chat <deck-id> \"8-slide carousel on hiring myths for founders\"\nslidefast chat <deck-id> \"tighten slide 3\"            # dry run: prints unsaved suggestions\nslidefast chat <deck-id> \"tighten slide 3\" --apply    # writes it\nslidefast review-link <deck-id> create                # client approval URL\nslidefast presentations export <deck-id> --format pdf\nslidefast publish <deck-id> --platform linkedin\n```\n\nGlobal flags, accepted before or after the subcommand: `--json`, `--project <uuid>`,\n`--api-key`, `--base-url`. Exit codes: 0 success, 1 API or config error, 2 bad usage.\n\n## Projects\n\nPresentations, themes, brand kits and social accounts all live inside a **project** (one per\nclient). List and create calls resolve a project in this order:\n\n1. the API key's **pin**, if it has one (set in the dashboard under Settings > API Keys). A\n   pinned key is a hard boundary: a conflicting `project_id` is rejected with 403.\n2. the per-call `project_id` argument (`X-Project-Id` header), for unpinned keys.\n3. the account's default project.\n\nEvery project-scoped tool takes an optional `project_id`, deliberately per call rather than a\nstateful \"active project\" - agent callers are stateless and often concurrent. Row access by id\nis never project-scoped, so reading a deck you own always works.\n\n## Available Tools\n\n| Tool | Description |\n|------|-------------|\n| `slidefast_check_rate_limit` | Check your API usage and limits |\n| `slidefast_get_usage` | Get monthly usage stats by resource |\n| `slidefast_get_me` | Get the authenticated user profile |\n| `slidefast_list_projects` | List projects (client workspaces) |\n| `slidefast_create_project` | Create a project |\n| `slidefast_get_active_project` | Which project this call would act in |\n| `slidefast_list_presentations` | List presentations with pagination, sorting, and tag filters |\n| `slidefast_create_presentation` | Create a new presentation |\n| `slidefast_get_presentation_tags` | List distinct presentation tags |\n| `slidefast_get_presentation` | Get presentation by ID |\n| `slidefast_update_presentation` | Update presentation (title, slides, theme, tags, status) |\n| `slidefast_duplicate_presentation` | Duplicate a presentation |\n| `slidefast_delete_presentation` | Delete a presentation |\n| `slidefast_enable_share` | Enable public sharing for a presentation |\n| `slidefast_disable_share` | Disable public sharing for a presentation |\n| `slidefast_generate_share_metadata` | Generate platform-specific social metadata |\n| `slidefast_update_share_metadata` | Manually update metadata for one platform |\n| `slidefast_chat` | Chat with AI to generate/modify slides |\n| `slidefast_get_chat_history` | Get conversation history |\n| `slidefast_clear_chat_history` | Clear conversation history |\n| `slidefast_translate_slides` | Translate slides to another language |\n| `slidefast_export_png_zip` | Export all slides as PNG ZIP (returns download URL) |\n| `slidefast_export_pdf` | Export as PDF (returns download URL) |\n| `slidefast_export_slide_png` | Export single slide as PNG (returns download URL) |\n| `slidefast_list_themes` | List themes |\n| `slidefast_create_theme` | Create a theme |\n| `slidefast_get_theme` | Get a theme |\n| `slidefast_update_theme` | Update a theme |\n| `slidefast_delete_theme` | Delete a theme |\n| `slidefast_duplicate_theme` | Duplicate a theme |\n| `slidefast_set_default_theme` | Set the default theme |\n| `slidefast_get_brand_kit` | The project's colours, fonts and logos |\n| `slidefast_list_library_images` | List library images |\n| `slidefast_search_library_images` | Semantic search over library images |\n| `slidefast_upload_library_image` | Upload a base64-encoded image to the library |\n| `slidefast_generate_background_image` | Generate AI background photos into the library |\n| `slidefast_delete_library_image` | Delete a library image |\n| `slidefast_upload_presentation_image` | Upload a base64-encoded image for slides |\n| `slidefast_get_social_connections` | Which platforms are connected, and the targets you can publish to |\n| `slidefast_publish_linkedin` | Publish a carousel to a LinkedIn profile or Page (**public**) |\n| `slidefast_publish_tiktok` | Publish a carousel to TikTok — **draft to the creator's inbox by default** |\n| `slidefast_publish_meta` | Publish a carousel to a Facebook Page or Instagram (**public**) |\n| `slidefast_list_social_posts` | History of every publish attempt |\n| `slidefast_get_social_post` | Poll one publish attempt to completion |\n| `slidefast_get_tiktok_publish_status` | Ask TikTok directly about a `publish_id` |\n| `slidefast_get_review_link` | The deck's client review link, or null |\n| `slidefast_create_review_link` | Create a no-login client approval URL (Agency plan) |\n| `slidefast_rotate_review_link` | New token, killing the URL already sent |\n| `slidefast_revoke_review_link` | Revoke the review link |\n| `slidefast_get_review_thread` | Review status plus every client comment |\n\n## Social Publishing\n\nPublishing is asynchronous. A publish tool returns a social post record straight away with\n`status: \"pending\"`; poll `slidefast_get_social_post` until it reads `published` or `failed`.\n\n**What goes public, and what does not:**\n\n| Tool | Result |\n|------|--------|\n| `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. |\n| `slidefast_publish_tiktok` with `mode=\"DIRECT_POST\"` | **Live immediately.** Requires a `privacy_level` from `creator_info.privacy_level_options`. |\n| `slidefast_publish_linkedin` | **Live immediately.** LinkedIn has no draft mode. |\n| `slidefast_publish_meta` | **Live immediately.** Facebook and Instagram have no draft mode here. |\n\nCall `slidefast_get_social_connections` first: it returns the LinkedIn profile and Page targets,\nthe connected TikTok accounts with the privacy options a direct post may use, and the Facebook\nPage / Instagram `destination_id` values. Access tokens are never returned.\n\nConnecting an account is a browser OAuth flow and cannot be done over the API or MCP. An\nunconnected platform answers `409` with a `connect_url` — pass that URL to the user so they can\nclick Connect in the Slidefast web app.\n\nPublishing is rate limited to 12 attempts per hour, and every attempt is recorded in\n`slidefast_list_social_posts` whether it succeeded or not. Pass the same `idempotency_key` when\nretrying so a flaky connection cannot post twice.\n\n## Chat: dry run vs apply\n\n`slidefast_chat` (and `slidefast chat`) takes a `mode`:\n\n- **`default`** - a dry run for *edits*. Changes to existing slides come back as\n  `suggestions[]` and are **not** saved. Re-send the same message with `mode=\"apply\"` to\n  commit them.\n- **`apply`** - the edits are written and returned as `changes[]`.\n- **The exception**: a turn that writes a *whole deck* (\"make me a carousel about X\") is saved\n  in either mode, because a creation is not a proposal. The response says\n  `slides_generated: true`.\n\nEach turn costs one AI message against the monthly quota in both modes.\n\n## Tool Parameter Notes\n\nMCP clients can pass structured objects directly for `slides`, `theme`, `display_settings`, `slides_context`, and theme payloads. Legacy JSON strings are still accepted for compatibility.\n\nImage upload tools accept base64-encoded image bytes plus `filename` and `content_type`. For example:\n\n```json\n{\n  \"image_base64\": \"iVBORw0KGgo...\",\n  \"filename\": \"brand-mark.png\",\n  \"content_type\": \"image/png\"\n}\n```\n\n`slidefast_chat` supports `slide_count`, `emoji_mode`, `hook_categories`, and `mode`. Use `mode: \"apply\"` when you want suggested edits applied directly to the presentation.\n\n## Usage Examples\n\n### Create a Presentation and Generate Slides\n\n```\nUser: Create a presentation about climate change and generate 5 slides\n\nClaude: I'll create a presentation and generate slides about climate change.\n\n[Uses slidefast_create_presentation to create \"Climate Change\" presentation]\n[Uses slidefast_chat with the message \"Create 5 slides about climate change, its causes, effects, and solutions\"]\n```\n\n### Export a Presentation\n\n```\nUser: Export my presentation as PDF\n\nClaude: I'll export your presentation as a PDF.\n\n[Uses slidefast_export_pdf with the presentation ID]\n[Returns: { url: \"https://cdn.slidefast.io/exports/.../presentation.pdf\", filename: \"My Presentation.pdf\", size: 123456 }]\n```\n\n### Modify Existing Slides\n\n```\nUser: Make the second slide more engaging\n\nClaude: I'll ask the AI to improve the second slide.\n\n[Uses slidefast_chat with \"Make slide 2 more engaging with better copy\"]\n```\n\n### Send a Carousel to TikTok as a Draft\n\n```\nUser: Send my latest carousel to TikTok so I can review it before posting\n\nClaude: I'll upload it to your TikTok inbox as a draft — nothing will be public.\n\n[Uses slidefast_get_social_connections to confirm TikTok is connected]\n[Uses slidefast_publish_tiktok with the default mode=\"MEDIA_UPLOAD\"]\n[Uses slidefast_get_social_post to poll until status is \"published\"]\n[Reports: the draft is waiting in your TikTok inbox — open the app to post it]\n```\n\n### Publish to a LinkedIn Page\n\n```\nUser: Post this carousel on our company page\n\nClaude: That will go live on the Page immediately — confirming before I post.\n\n[Uses slidefast_get_social_connections to find the organization target]\n[Uses slidefast_publish_linkedin with destination_type=\"organization\" and the organization_id]\n[Uses slidefast_get_social_post to poll, then returns the external_post_url]\n```\n\n## Slide Types\n\nWhen creating or modifying slides, these types are available:\n\n- `cover` - Title/cover slide\n- `content` - General content slide\n- `quote` - Quote with attribution\n- `cta` - Call-to-action slide\n- `stat` - Statistics highlight\n- `comparison` - Side-by-side comparison\n- `steps` - Step-by-step process\n- `feature` - Feature highlight\n- `bullet-list` - Bulleted list\n- `big-text` - Large text emphasis\n\n## Theme Configuration\n\nThemes require these fields (all colors in #RRGGBB format):\n\n```json\n{\n  \"id\": \"custom-theme\",\n  \"name\": \"My Theme\",\n  \"background\": \"#FFFFFF\",\n  \"accent\": \"#3B82F6\",\n  \"text\": \"#1F2937\",\n  \"textSecondary\": \"#6B7280\",\n  \"borderColor\": \"#E5E7EB\"\n}\n```\n\n## Self-Hosting the Remote Server\n\nTo run your own remote MCP server:\n\n1. Clone the repository\n2. Build the Docker image:\n   ```bash\n   cd slidefast-mcp\n   docker build -t slidefast-mcp .\n   ```\n3. Run the container:\n   ```bash\n   docker run -p 8080:8080 slidefast-mcp\n   ```\n\nOr add to your docker-compose:\n\n```yaml\nservices:\n  mcp:\n    build:\n      context: ./slidefast-mcp\n    ports:\n      - \"8080:8080\"\n    environment:\n      - SLIDEFAST_API_BASE_URL=https://slidefast.io/api/v1/public\n```\n\nThe remote server exposes:\n\n- `GET /health` for container and load balancer checks\n- `POST /mcp` for Streamable HTTP MCP clients\n\nFor remote mode, clients should send the Slidefast API key as:\n\n```http\nAuthorization: Bearer sk-sf-your-api-key\n```\n\nFor local stdio mode, set `SLIDEFAST_API_KEY`.\n\n## Environment Variables\n\n| Variable | Description | Default |\n|----------|-------------|---------|\n| `SLIDEFAST_API_KEY` | Your Slidefast API key | Required for local mode |\n| `SLIDEFAST_API_BASE_URL` | API base URL | `https://slidefast.io/api/v1/public` |\n| `HOST` | Server host (remote mode) | `0.0.0.0` |\n| `PORT` | Server port (remote mode) | `8080` |\n\n## Development\n\n```bash\n# Clone the repo\ngit clone https://github.com/lorisalx/slidefast-mcp.git\ncd slidefast-mcp\n\n# Install dev dependencies\npip install -e \".[dev]\"\n\n# Run tests\npytest\n# or, when using uv:\nuv run pytest\n\n# Run locally\nSLIDEFAST_API_KEY=sk-sf-xxx slidefast-mcp\n```\n\n## Troubleshooting\n\n- `No API key found`: set `SLIDEFAST_API_KEY` for stdio mode, or send `Authorization: Bearer sk-sf-...` for remote mode.\n- `Authentication failed`: the key is missing, malformed, revoked, or belongs to another environment.\n- `Payment required` / `402`: the account has reached a plan limit for presentations, exports, assets, or AI messages.\n- `Rate limit exceeded` / `429`: wait for the API key rate limit window to reset or use `slidefast_check_rate_limit`.\n- Export tools return public CDN URLs when successful. These URLs are public, not expiring signed URLs.\n\n## License\n\nMIT License - see [LICENSE](LICENSE) for details.\n\n## Links\n\n- [Slidefast](https://slidefast.io) - AI-powered presentation creator\n- [MCP Protocol](https://modelcontextprotocol.io) - Model Context Protocol specification\n- [FastMCP](https://gofastmcp.com) - FastMCP framework documentation",
  "bytes": 15764,
  "sha": "329c4ed2a300d816445e58d3e58848c16213a152c3cc33c2703f1ffb83570b5a",
  "repo_slug": "",
  "fonte": "pypi",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_slidefast_slidefast_f4a06512/readme"
}