The Swiper Studio MCP (Model Context Protocol) Server lets AI assistants programmatically create, edit, and manage Swiper slider projects. Connect your favorite AI coding tool and build sliders with natural language - create slides, add content, configure effects, upload images, take screenshots, and set responsive breakpoints.
https://studio.swiperjs.com/mcpclaude mcp add --transport http swiper-studio https://studio.swiperjs.com/mcp
On first use, Claude Code will open a browser window for OAuth authentication. Sign in with your Swiper Studio account and click Allow to grant access.
Verify the connection:
claude mcp list
Or within Claude Code, use the /mcp command to check server status.
Scopes:
# Local (default) - only you, current projectclaude mcp add --transport http swiper-studio https://studio.swiperjs.com/mcp# Project - shared with team via .mcp.jsonclaude mcp add --transport http swiper-studio --scope project https://studio.swiperjs.com/mcp# User - available across all your projectsclaude mcp add --transport http swiper-studio --scope user https://studio.swiperjs.com/mcp
Remove the server:
claude mcp remove swiper-studio
Open Cursor Settings, navigate to Tools & MCP, and add a new MCP server. Or edit your .cursor/mcp.json:
{"mcpServers": {"swiper-studio": {"url": "https://studio.swiperjs.com/mcp"}}}
Create a .vscode/mcp.json file in your workspace:
{"servers": {"swiper-studio": {"type": "http","url": "https://studio.swiperjs.com/mcp"}}}
Or use the Command Palette: MCP: Add Server and select HTTP transport with the URL https://studio.swiperjs.com/mcp.
codex mcp add swiper-studio --url https://studio.swiperjs.com/mcp
Or edit ~/.codex/config.toml:
[mcp_servers.swiper-studio]url = "https://studio.swiperjs.com/mcp"
Add to your opencode.jsonc:
{"mcp": {"swiper-studio": {"type": "remote","url": "https://studio.swiperjs.com/mcp","enabled": true}}}
Swiper Studio MCP uses OAuth 2.0 with PKCE for secure authentication. This is handled automatically by MCP clients:
An active Swiper Studio subscription is required. Tokens refresh automatically - you only need to authenticate once.
Swiper Studio MCP provides 24 tools organized into 6 categories.
| Tool | Description |
|---|---|
create_project | Create a new project with optional initial settings (effect, navigation, pagination, etc.) |
get_project | Get full project details including all settings and slide list |
update_project | Update Swiper params - effect, speed, direction, navigation, pagination, autoplay, and more |
update_project_style | Update slider container styles - size, padding, aspect ratio, font |
delete_project | Delete a project and all its assets |
| Tool | Description |
|---|---|
add_slide | Add a new slide with background color, media, layout, and padding |
update_slide | Update slide properties - background, media, layout, borders |
delete_slide | Remove a slide (minimum 1 must remain) |
list_slides | List all slides with summary info |
duplicate_slide | Deep clone a slide with all children and new IDs |
set_slide_breakpoint | Set responsive breakpoint styles for a slide (bg, layout, borders, padding) |
| Tool | Description |
|---|---|
add_text | Add text with font size, color, alignment, bold/italic, and animations |
add_image | Add an image with sizing, borders, and animations |
add_video | Add a video with sizing, borders, loop, and animations |
add_block | Add a container block or clickable link. Nest content inside with parent_id |
update_child | Update any child element's properties |
remove_child | Remove a child element |
get_slide_children | Get the full children tree for a slide |
set_child_breakpoint | Set responsive breakpoint styles for a child element (per type) |
| Tool | Description |
|---|---|
set_breakpoint | Set responsive overrides at a screen width (768, 812, 1024, 1280, 1920) |
remove_breakpoint | Remove a responsive breakpoint |
| Tool | Description |
|---|---|
get_slide_screenshot | Capture a screenshot at any device size (phone, tablet, laptop, desktop) |
get_upload_token | Generate a temporary token for uploading files to the project CDN |
get_reference | Get built-in documentation on child types, layout, animations, effects, breakpoints, and more |
Project-> Slides (ordered list)-> Children (text, image, video, block)-> Nested children (blocks can contain more children)
Base project parameters apply at the smallest viewport (375px). Use set_breakpoint to override project params, set_slide_breakpoint for per-slide styles, and set_child_breakpoint for per-child styles at larger screen widths:
| Breakpoint | Typical Device |
|---|---|
| 768 | Tablet portrait |
| 812 | Phone landscape |
| 1024 | Tablet landscape |
| 1280 | Laptop |
| 1920 | Desktop |
Children are positioned with flexbox, not absolute positioning. Each slide and block has:
content_direction - "row" or "column"content_position - 12 values like "center", "left-top", "space-between-center"content_gap - spacing between children in pxThere is no standalone link element. To create a clickable link:
element: "link" and link_hrefparent_idAll colors use hex format: #rrggbb or #rrggbbaa (with alpha).
Element dimensions use a type + value system:
auto - sized by contentrelative - percentage of parent (0-100)fixed - exact pixel valueYou: Create a 3-slide image slider with navigation arrows and autoplayAI will:1. create_project({ title: "Image Slider", navigation: { enabled: true }, autoplay: { enabled: true, delay: 3000 } })2. update_slide({ slide_id, bg_color: "#1a1a2e", image_url: "https://..." })3. add_slide({ bg_color: "#16213e", image_url: "https://..." })4. add_slide({ bg_color: "#0f3460", image_url: "https://..." })5. get_slide_screenshot({ project_id })
You: Create a slide with three product cards side by sideAI will:1. update_slide({ content_direction: "row", content_position: "center", content_gap: 24 })2. For each card:a. add_block({ content_direction: "column", bg_color: "#ffffff10", border_radius: 16,padding_horizontal: 24, padding_vertical: 24, width_type: "fixed", width_fixed: 300 })b. add_image({ parent_id: <block>, url: "https://...", width_type: "relative", width_relative: 100 })c. add_text({ parent_id: <block>, content: "Product Name", font_size: 20, font_bold: true })d. add_text({ parent_id: <block>, content: "$29.99", font_size: 16, color: "#60a5fa" })
You: Add animated text that fades in with staggered timingAI will:1. add_text({ content: "Welcome", font_size: 48, animation: { type: "fade", delay: 0 } })2. add_text({ content: "To Our Store", font_size: 32, animation: { type: "fade", delay: 300 } })3. add_text({ content: "Shop Now", font_size: 18, animation: { type: "zoom", delay: 600 } })
20+ animation types are available including fade, zoom, slide, scale, blur, rotate, and text-specific ones like typewriter, letter-blur, letter-fade, letter-scale, and number-roll.
You: Upload my product photo and add it to the sliderAI will:1. get_upload_token({ project_id })2. Save and execute the upload script:node upload.js <token> <project_id> /path/to/photo.jpg3. add_image({ slide_id, url: "<returned_cdn_url>", fill: "cover" })
The upload token is valid for 30 minutes. Supported formats: JPG, PNG, GIF, WebP, SVG, MP4, WebM, MOV.
You: Set up a creative 3D card flip effect with shadowAI will:1. update_project({effect: "creative",speed: 800,creative_effect: {limit_progress: 2,prev: { translate: ["-120%", "0%", -500], rotate: [0, 0, -15], opacity: 0, shadow: true },next: { translate: ["120%", "0%", -500], rotate: [0, 0, 15], opacity: 0, shadow: true }}})
Available effects: slide, fade, cube, flip, coverflow, cards, panorama, carousel, shutters, slicer, gl, tinder, material, cards-stack, expo, super-flow, creative.
You: Make the slider full-screen portrait on mobile, 16:9 on desktopAI will:1. update_project_style({ size_type: "aspect-ratio", aspect_ratio: [9, 16] })// Base params = mobile (375px)2. set_breakpoint({ width: 768, size_type: "aspect-ratio", aspect_ratio: [16, 9] })// Override for tablet and up3. get_slide_screenshot({ device: "phone-portrait" })// Verify mobile4. get_slide_screenshot({ device: "desktop" })// Verify desktop
You: Show me how this looks on mobile vs desktopAI will:1. get_slide_screenshot({ device: "phone-portrait" }) // 375x8122. get_slide_screenshot({ device: "tablet-landscape" }) // 1024x7683. get_slide_screenshot({ device: "desktop" }) // 1920x1080
Available device presets: phone-portrait (375x812), phone-landscape (812x375), tablet-portrait (768x1024), tablet-landscape (1024x768), laptop (1280x800), desktop (1920x1080), responsive (based on slider style settings).
Here is a complete example building a multi-slide portfolio with uploaded logos, custom backgrounds, animated content, clickable links, and responsive breakpoints:
You: Build a portfolio slideshow for my 5 projects with their logos, dark theme,creative transitions, and links to each websiteAI will:1. create_project({ title: "Portfolio", effect: "creative", speed: 800,loop: true, navigation: { enabled: true }, pagination: { enabled: true },autoplay: { enabled: true, delay: 4000, pause_on_mouse_enter: true },creative_effect: {prev: { translate: ["-120%", 0, -500], rotate: [0, 0, -15], opacity: 0, shadow: true },next: { translate: ["120%", 0, -500], rotate: [0, 0, 15], opacity: 0, shadow: true }}})2. update_project_style({ size_type: "aspect-ratio", aspect_ratio: [9, 16], font_family: "Inter" })3. set_breakpoint({ width: 768, size_type: "aspect-ratio", aspect_ratio: [16, 9] })4. get_upload_token({ project_id })5. Upload logos via the upload script6. For each project slide:a. add_slide / update_slide({ bg_color: "#0f0f1a", content_position: "center", content_gap: 24 })b. add_image({ url: "<logo_cdn_url>", height_type: "relative", height_relative: 15,animation: { type: "zoom", delay: 0 } })c. add_text({ content: "Project Name", font_size: 56, font_bold: true,animation: { type: "fade", delay: 200 } })d. add_text({ content: "Description text...", font_size: 20, color: "#ffffffaa",animation: { type: "fade", delay: 400 } })e. add_block({ element: "link", link_href: "https://example.com", link_target: "_blank",animation: { type: "fade", delay: 600 } })f. add_text({ parent_id: <link_block>, content: "example.com", color: "#60a5fa" })7. get_slide_screenshot({ slide_index: 0, device: "phone-portrait" })8. get_slide_screenshot({ slide_index: 0, device: "desktop" })
AI assistants can call get_reference to access documentation on any topic without leaving the conversation:
| Topic | What It Covers |
|---|---|
demo_images | Built-in library of free images (nature, models, gradients, workspace, movies) with URLs |
child_types | All 4 content types with full property lists and how to create links |
layout_system | Flexbox positioning - directions, 12 position values, nesting |
animations | All 20+ animation types, text-only animations, animation params |
effects | All 16 Swiper effects with descriptions and effect-specific params |
swiper_params | Every core param and module param with sub-properties |
color_format | Hex format, alpha, common color values |
sizing | Width/height type system (auto, relative, fixed), max-width for blocks |
slide_content | Slide properties - backgrounds, media, layout, borders |
breakpoints | Responsive system, available breakpoints, breakpointable params |
file_upload | Upload flow with embedded Node.js upload script |
examples | Common workflow patterns and step-by-step recipes |