list_decks
Returns owned deck summaries ordered by newest first.
Returns
Deck summaries are returned in data; meta contains page, per_page, and total.
Connect MCP-compatible AI tools to Slides to access your decks and account data.
Create and manage API keys from your API key management page.
MCP is available at mcp.slides.com with Bearer authentication. The server exposes the core deck operations as named tools, with MCP-specific batch slide retrieval, slide screenshots, and an inline presentation viewer.
Authentication
Authorization: Bearer YOUR_API_KEY
Server URL
https://mcp.slides.com/
Transport
Streamable HTTP
Remote HTTP clients can connect directly. Clients that only launch local MCP processes can use a bridge such as mcp-remote.
Claude Desktop Example
{
"mcpServers": {
"slides": {
"command": "npx",
"args": [
"-y",
"mcp-remote@latest",
"https://mcp.slides.com/",
"--header",
"Authorization: Bearer YOUR_API_KEY"
]
}
}
}
list_slides
Find slides and their IDs in a deck you own.
get_slides
Read up to 10 selected slides in one call.
get_slide_screenshot
Capture a screenshot of one slide.
update_slide
Update one slide’s HTML or speaker notes.
add_slide
Add a slide at the end or relative to another slide.
move_slides
Move selected slides before or after another slide.
remove_slides
Remove selected slides from an owned deck.
list_decks
Returns owned deck summaries ordered by newest first.
Returns
Deck summaries are returned in data; meta contains page, per_page, and total.
list_trashed_decks
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.
get_deck
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.
view_deck
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.
create_deck
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.
update_deck
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.
trash_deck
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.
recover_deck
Recovers an owned deck from trash.
Example JSON Content
{
"id": 456,
"recovered": true
}
Returns
JSON content confirming the deck ID and recovered state.
list_slides
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.
get_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.
get_slide_screenshot
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 60 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.
update_slide
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.
add_slide
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.
move_slides
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.
remove_slides
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.
list_deck_shares
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.
create_deck_share
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.
revoke_deck_share
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.
create_deck_export
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.
get_deck_export
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.
list_team_decks
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.
get_team_deck
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.