Connect Claude, ChatGPT, and other AI tools to Slides so they can find, create, edit, and share your presentations. Most tools connect in a minute, with no API key required. You need an active Slides subscription.
-
Copy the Slides server URL.
https://mcp.slides.com/
-
Add it as a remote MCP server in your AI tool. Some tools call this a custom connector or app.
-
Sign in to Slides when prompted, choose Full access or Read-only, and click Allow access.
For step-by-step instructions for Claude, ChatGPT, Claude Code, Codex, and Cursor, see Connect Slides to Claude, ChatGPT, and other AI tools. Review and disconnect tools in Connected apps.
Tools
The server exposes the core deck operations as named tools, plus an authoring guide, batch slide retrieval, slide screenshots, and an interactive deck library and presentation viewer for clients that support MCP Apps. Call get_authoring_guide before creating or editing slide HTML.
Call before creating or editing slide HTML to get supported content blocks, slide attributes, canvas sizing, themes, and examples.
Returns
The complete authoring guide as Markdown text in the tool response.
Open an interactive library to browse and preview your owned decks. Available with Read-only or Full access.
Example Arguments
{
"q": "roadmap",
"sort": "updated_desc"
}
Returns
Structured content containing decks (id, title, thumbnail_url, updated_at, url), pagination, and effective search/sort filters.
Returns deck metadata and a short-lived MCP App embed URL for an owned deck, optionally opened at a specific slide.
Example Arguments
{
"id": 456,
"slide_id": "a1b2c3d4e5f6"
}
Example Structured Content
{
"id": 456,
"title": "Quarterly Review",
"description": "Q1 business update",
"thumbnail_url": "https://...",
"url": "https://slides.com/alice/q1-review",
"urls": {
"default": "https://slides.com/alice/q1-review",
"fullscreen": "https://slides.com/alice/q1-review/fullscreen",
"edit": "https://slides.com/alice/q1-review/edit",
"present": "https://slides.com/alice/q1-review/live"
},
"slug": "q1-review",
"visibility": "self",
"slide_count": 12,
"width": 1280,
"height": 720,
"ephemeral_embed_url": "https://mcp.slides.com/decks/456/embed?embed_token=...",
"ephemeral_embed_url_expires_at": "2030-08-01T09:40:00Z"
}
Returns
Structured content containing deck summary fields, an ephemeral embed URL, and its expiration.
Returns owned deck summaries ordered by newest first.
Returns
Deck summaries are returned in data; meta contains page, per_page, and total.
Returns owned decks in trash, ordered by the time they were trashed.
Returns
Deck summaries are returned in data with trashed_at and without url; meta contains page, per_page, and total.
Returns details for an owned deck.
Example JSON Content (include_deck_html=true)
{
"id": 456,
"title": "Quarterly Review",
"description": "Q1 business update",
"thumbnail_url": "https://...",
"url": "https://slides.com/alice/q1-review",
"urls": {
"default": "https://slides.com/alice/q1-review",
"fullscreen": "https://slides.com/alice/q1-review/fullscreen",
"edit": "https://slides.com/alice/q1-review/edit",
"present": "https://slides.com/alice/q1-review/live"
},
"slug": "q1-review",
"visibility": "self",
"slide_count": 12,
"css": ".slides h1 { color: #ff0000; }",
"width": 1280,
"height": 720,
"margin": 0.05,
"transition": "slide",
"background_transition": "slide",
"rtl": false,
"loop": false,
"theme_font": "montserrat",
"theme_color": "white-blue",
"language": "en",
"created_at": "2026-03-01T12:00:00Z",
"updated_at": "2026-03-05T09:00:00Z",
"deck_html": "<section>...</section>"
}
Returns
Returns deck details. Read speaker notes through the slide APIs. deck_html is present only when include_deck_html is true.
Creates a new deck.
Example Arguments
{
"title": "Quarterly Review",
"description": "Q1 business update",
"width": 1280,
"height": 720,
"theme_color": "white-blue",
"theme_font": "montserrat",
"visibility": "self",
"slides": [
{
"html": "<section><h1>Quarterly Review</h1></section>",
"notes": "Welcome to the Q1 review."
},
{
"html": "<section><h2>Results</h2><p>Revenue increased by 18%.</p></section>"
}
]
}
Returns
Returns deck metadata and slide_ids in presentation order, without HTML, notes, or CSS. Use the get_slides tool to retrieve content. Validation failures return an error.
Updates selected fields on an owned deck.
Example Arguments
{
"id": 456,
"title": "Updated title",
"theme_font": "quicksand",
"visibility": "all"
}
Returns
Returns deck metadata without HTML, notes, or CSS. Use get_deck with include_deck_html to retrieve HTML. Read-only keys and validation failures return an error.
Moves an owned deck to trash without permanently deleting it.
Example JSON Content
{
"id": 456,
"trashed": true
}
Returns
JSON content confirming the deck ID and trashed state.
Recovers an owned deck from trash.
Example JSON Content
{
"id": 456,
"recovered": true
}
Returns
JSON content confirming the deck ID and recovered state.
Returns slide summaries in presentation order without slide HTML or speaker notes. Use the returned IDs to retrieve, edit, move, or remove slides.
Returns
Slide summaries are returned in data; meta contains page, per_page, and total. Position indexes start at 0. Slides in a vertical group share position.horizontal; position.vertical identifies each slide within the group and is null for ungrouped slides.
Returns selected slides in the requested order and reports IDs that were not found.
Example Arguments
{
"deck_id": 456,
"slide_ids": [
"a1b2c3d4e5f6",
"f6e5d4c3b2a1"
]
}
Returns
Returns slides with HTML, speaker notes, and position, plus missing_slide_ids for any IDs not found. Position indexes start at 0. If no IDs are found, slides is an empty array.
Returns a JPEG screenshot of a slide in a deck you own. Screenshots are returned directly to your MCP client, without a download URL, and are not saved by Slides. Limited to 120 screenshots per user per hour.
Example Arguments
{
"deck_id": 456,
"slide_id": "a1b2c3d4e5f6"
}
Returns
Returns a text metadata block and an image/jpeg content block containing base64-encoded image bytes.
Replaces one slide’s HTML, notes, or both while preserving its slide ID. Provide at least one of html or notes.
Example Arguments
{
"deck_id": 456,
"slide_id": "a1b2c3d4e5f6",
"notes": "Introduce the results."
}
Returns
Returns the slide ID, deck ID, and position without HTML or notes. Use the get_slides tool to retrieve content. Validation failures leave the deck unchanged.
Creates a slide and returns its ID. By default, adds it at the horizontal end of the deck. To choose a position, provide insert_before_slide_id or insert_after_slide_id. If that slide is in a vertical group, the new slide joins the same group.
Example Arguments
{
"deck_id": 456,
"html": "<section><h2>Next steps</h2></section>",
"insert_after_slide_id": "a1b2c3d4e5f6"
}
Returns
Returns the generated slide ID, deck ID, and position without HTML or notes. Use the get_slides tool to retrieve content.
Moves slides in the order given in slide_ids. Provide either insert_before_slide_id or insert_after_slide_id, identifying a slide that is not being moved. If that slide is in a vertical group, the moved slides join the same group; otherwise they become horizontal slides.
Example Arguments
{
"deck_id": 456,
"slide_ids": [
"f6e5d4c3b2a1",
"a1b2c3d4e5f6"
],
"insert_after_slide_id": "123456abcdef"
}
Returns
Returns count, the number of moved slides. If some requested IDs are not found, the other slides are moved and missing_slide_ids lists the missing IDs. Returns a not-found error if none of the requested slides exist.
Removes slides and their speaker notes. Requests that would remove every slide are rejected. A vertical group with only one remaining slide becomes a horizontal slide.
Example Arguments
{
"deck_id": 456,
"slide_ids": [
"f6e5d4c3b2a1",
"a1b2c3d4e5f6"
]
}
Returns
Returns count, the number of removed slides. If some requested IDs are not found, the other slides are removed and missing_slide_ids lists the missing IDs. Returns a not-found error if none of the requested slides exist.
Returns all private share links for an owned deck, ordered newest first.
Returns
Private share links are returned in data; meta contains total. Each link includes default and fullscreen URLs.
Creates a private share link for an owned private or team-visible deck.
Example Arguments
{
"name": "Customer review",
"password": "optional-password",
"expires_at": "2030-08-01T12:00:00Z",
"notify_on_view": true,
"deck_id": 456
}
Returns
Returns the new private share link with default and fullscreen URLs. Passwords are never returned. Each deck is limited to 100 private share links.
Revokes a private share link for an owned deck.
Example JSON Content
{
"id": 789,
"revoked": true
}
Returns
JSON content confirming the private share link ID and revoked state.
Starts an asynchronous PDF or ZIP export for an owned deck.
Example Arguments
{
"format": "pdf",
"margin": 0.05,
"slide_number": true,
"slide_notes": false,
"separate_fragments": false,
"deck_id": 456
}
Returns
Returns a pending export; meta contains poll_after_seconds.
Returns the current state of a PDF or ZIP export for an owned deck.
Returns
Returns a pending, completed, or failed export. Completed exports include a temporary download URL and its expiration time.
Returns team-visible and public decks from the authenticated user’s team.
Returns
Deck summaries are returned in data; meta contains page, per_page, and total. Every summary includes visibility and deck owner identity.
Returns a team-visible or public deck.
Returns
Returns the same fields as get_deck, plus deck owner identity. deck_html is present only when include_deck_html is true.