MCP tools reference

Beautiful.ai MCP tools

14 tools for Beautiful.ai on the Cotlet MCP server. Your agent picks them from tools/list.

MCP server
https://cotlet.dev/mcp/v1
Connects with
Your own Beautiful.ai account (email and password, or Google or Microsoft sign-in)
Integration page
Beautiful.ai
Beautiful.ai Endpoints
Endpoint Access Description
beautiful-ai_list_presentations read Presentations in your library and shared folders, newest first, with folder, slide count and owner.
beautiful-ai_list_folders read Your folders, including shared workspace folders, with the number of decks in each.
beautiful-ai_get_slides read Every slide in order: layout, text, speaker notes and whether it is skipped.
beautiful-ai_get_presentation_analytics read Viewer and slide analytics for a deck, as the app shows them.
beautiful-ai_list_collaborators read People with access to a presentation and whether they can edit or view.
beautiful-ai_update_slide_text write Replace text on one slide, keeping its Smart Slide layout.
beautiful-ai_set_speaker_notes write Write or replace the speaker notes of a slide.
beautiful-ai_skip_slide write Skip or unskip a slide when presenting.
beautiful-ai_duplicate_presentation write Copy any presentation in your library, as the Duplicate menu item does.
beautiful-ai_move_to_folder write Put a presentation in one of your folders.
beautiful-ai_export_presentation write Export the deck and return a download link.
beautiful-ai_invite_collaborator write Invite someone by email to edit or view a presentation. They get an email.
beautiful-ai_remove_collaborator write Revoke a collaborator's access to a presentation.
beautiful-ai_create_share_link write Share the presentation and return a link to it.

MCP tool beautiful-ai_list_presentations

Returns decks you can open, newest first. Filter by title keyword or folder. Pass presentation_id from each item to the other tools. Pages hold up to 100 decks.

Parameters

Parameters: list_presentations
NameTypeDescription
query string Search titles.
folder string Only presentations in this folder.
limit integer 1 to 100. Default: 25.

tools/call

JSON-RPC

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "beautiful-ai_list_presentations",
    "arguments": {}
  }
}

Example response

{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "presentations": [
      {
        "presentation_id": "pres_8f3k2m9q",
        "title": "Q3 QBR",
        "folder": "Sales",
        "slides": 18,
        "owner": "You",
        "updated_at": "2026-10-08T14:20:00Z"
      },
      {
        "presentation_id": "pres_2q7w1x5c",
        "title": "Investor update",
        "folder": null,
        "slides": 12,
        "owner": "You",
        "updated_at": "2026-10-05T09:02:00Z"
      }
    ]
  },
  "isError": false
}

MCP tool beautiful-ai_list_folders

Returns folders by name with deck counts. Use the name as the folder parameter of list_presentations and move_to_folder.

Parameters

No parameters.

tools/call

JSON-RPC

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "beautiful-ai_list_folders",
    "arguments": {}
  }
}

Example response

{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "folders": [
      {
        "name": "Sales",
        "presentations": 14,
        "shared": true
      },
      {
        "name": "Board",
        "presentations": 6,
        "shared": false
      }
    ]
  },
  "isError": false
}

Get slides

read

MCP tool beautiful-ai_get_slides

Returns the slides of one deck in order, starting at 1. Text is listed in reading order per slide. Use it before update_slide_text so your agent sees what is on each slide.

Parameters

Parameters: get_slides
NameTypeDescription
presentation_id required string Presentation ID from list_presentations.

tools/call

JSON-RPC

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "beautiful-ai_get_slides",
    "arguments": {
      "presentation_id": "presentation_8c41d2"
    }
  }
}

Example response

{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "presentation_id": "pres_8f3k2m9q",
    "slides": [
      {
        "slide_number": 1,
        "layout": "Title",
        "text": [
          "Q3 QBR",
          "Sales team"
        ],
        "speaker_notes": "",
        "skipped": false
      },
      {
        "slide_number": 4,
        "layout": "Bullets",
        "text": [
          "FY25 targets",
          "Grow ARR 40%",
          "Launch in two new regions"
        ],
        "speaker_notes": "Mention the EU launch date.",
        "skipped": false
      }
    ]
  },
  "isError": false
}

MCP tool beautiful-ai_get_presentation_analytics

Returns the viewer and slide analytics Beautiful.ai shows for one deck. Availability depends on your plan; without it the call fails with an error that names the plan.

Parameters

Parameters: get_presentation_analytics
NameTypeDescription
presentation_id required string Presentation ID from list_presentations.

tools/call

JSON-RPC

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "beautiful-ai_get_presentation_analytics",
    "arguments": {
      "presentation_id": "pres_8f3k2m9q"
    }
  }
}

Example response

{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "presentation_id": "pres_8f3k2m9q",
    "views": 14,
    "unique_viewers": 9,
    "slides": [
      {
        "slide_number": 1,
        "views": 14
      },
      {
        "slide_number": 4,
        "views": 11
      }
    ]
  },
  "isError": false
}

MCP tool beautiful-ai_list_collaborators

Returns each person with access to the deck, with email and permission. Use the email in remove_collaborator.

Parameters

Parameters: list_collaborators
NameTypeDescription
presentation_id required string Presentation ID from list_presentations.

tools/call

JSON-RPC

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "beautiful-ai_list_collaborators",
    "arguments": {
      "presentation_id": "presentation_8c41d2"
    }
  }
}

Example response

{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "presentation_id": "pres_8f3k2m9q",
    "collaborators": [
      {
        "email": "anna@example.com",
        "permission": "can_edit"
      },
      {
        "email": "tom@example.com",
        "permission": "can_view"
      }
    ]
  },
  "isError": false
}

MCP tool beautiful-ai_update_slide_text

Replaces exact text on one slide and keeps its layout. Returns the number of matches replaced and the slide text after the change. It reaches no one and one call undoes it, so it runs without asking.

Parameters

Parameters: update_slide_text
NameTypeDescription
presentation_id required string Presentation ID from list_presentations.
slide_number required integer Slide position in the deck, starting at 1.
find required string Exact text to replace.
replace required string New text.

tools/call

JSON-RPC

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "beautiful-ai_update_slide_text",
    "arguments": {
      "presentation_id": "pres_8f3k2m9q",
      "slide_number": 4,
      "find": "FY25 targets",
      "replace": "FY26 targets"
    }
  }
}

Example response

{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "presentation_id": "pres_8f3k2m9q",
    "slide_number": 4,
    "replaced": 1,
    "slide_text": [
      "FY26 targets",
      "Grow ARR 40%",
      "Launch in two new regions"
    ]
  },
  "isError": false
}

MCP tool beautiful-ai_set_speaker_notes

Replaces the speaker notes of one slide with the text you send. An empty string clears them. It reaches no one and one call undoes it, so it runs without asking.

Parameters

Parameters: set_speaker_notes
NameTypeDescription
presentation_id required string Presentation ID from list_presentations.
slide_number required integer Slide position in the deck, starting at 1.
notes required string Notes text. Empty string clears them.

tools/call

JSON-RPC

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "beautiful-ai_set_speaker_notes",
    "arguments": {
      "presentation_id": "pres_2q7w1x5c",
      "slide_number": 2,
      "notes": "Open with the churn drop. Pause for questions before the pricing slide."
    }
  }
}

Example response

{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "presentation_id": "pres_2q7w1x5c",
    "slide_number": 2,
    "speaker_notes": "Open with the churn drop. Pause for questions before the pricing slide."
  },
  "isError": false
}

Skip slide

write

MCP tool beautiful-ai_skip_slide

Marks one slide as skipped, so it is left out when presenting, or shows it again. It reaches no one and one call undoes it, so it runs without asking.

Parameters

Parameters: skip_slide
NameTypeDescription
presentation_id required string Presentation ID from list_presentations.
slide_number required integer Slide position in the deck, starting at 1.
skipped required boolean true to skip, false to show it again.

tools/call

JSON-RPC

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "beautiful-ai_skip_slide",
    "arguments": {
      "presentation_id": "presentation_8c41d2",
      "slide_number": 1,
      "skipped": true
    }
  }
}

Example response

{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "presentation_id": "pres_2q7w1x5c",
    "slide_number": 7,
    "skipped": true
  },
  "isError": false
}

MCP tool beautiful-ai_duplicate_presentation

Creates a copy of the deck in your library and returns its ID. The copy is private to you until you share it, so it runs without asking.

Parameters

Parameters: duplicate_presentation
NameTypeDescription
presentation_id required string Presentation ID from list_presentations.
title string Title of the copy. Default: same as the original.

tools/call

JSON-RPC

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "beautiful-ai_duplicate_presentation",
    "arguments": {
      "presentation_id": "presentation_8c41d2"
    }
  }
}

Example response

{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "presentation_id": "pres_9k4m6b2v",
    "source_id": "pres_5d9a4r1t",
    "title": "Sales review, November",
    "slides": 16
  },
  "isError": false
}

MCP tool beautiful-ai_move_to_folder

Moves a deck into a folder from list_folders. People with access to that folder can then see it. One call moves it back, so it runs without asking.

Parameters

Parameters: move_to_folder
NameTypeDescription
presentation_id required string Presentation ID from list_presentations.
folder required string Folder name from list_folders.

tools/call

JSON-RPC

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "beautiful-ai_move_to_folder",
    "arguments": {
      "presentation_id": "presentation_8c41d2",
      "folder": "folder"
    }
  }
}

Example response

{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "presentation_id": "pres_9k4m6b2v",
    "folder": "Sales"
  },
  "isError": false
}

MCP tool beautiful-ai_export_presentation

Exports one deck and returns a download link. Formats follow your Beautiful.ai plan. The export changes nothing in the deck and reaches no one, so it runs without asking.

Parameters

Parameters: export_presentation
NameTypeDescription
presentation_id required string Presentation ID from list_presentations.
format required enum pdf or pptx.

tools/call

JSON-RPC

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "beautiful-ai_export_presentation",
    "arguments": {
      "presentation_id": "presentation_8c41d2",
      "format": "pdf"
    }
  }
}

Example response

{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "presentation_id": "pres_2q7w1x5c",
    "format": "pdf",
    "download_url": "https://www.beautiful.ai/export/exp_71c0aa.pdf"
  },
  "isError": false
}

Invite collaborator

write Confirm

MCP tool beautiful-ai_invite_collaborator

Gives one person access to the deck and emails them. Permission is can_edit or can_view. By default you confirm each call; you can switch that off for this tool.

Parameters

Parameters: invite_collaborator
NameTypeDescription
presentation_id required string Presentation ID from list_presentations.
email required string Email of the person to invite.
permission required enum can_edit or can_view.

tools/call

JSON-RPC

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "beautiful-ai_invite_collaborator",
    "arguments": {
      "presentation_id": "presentation_8c41d2",
      "email": "jane@example.com",
      "permission": "can_edit"
    }
  }
}

Example response

{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "presentation_id": "pres_8f3k2m9q",
    "email": "anna@example.com",
    "permission": "can_edit",
    "status": "invited"
  },
  "isError": false
}

Remove collaborator

write Confirm

MCP tool beautiful-ai_remove_collaborator

Removes one person from the deck. They lose access at once. By default you confirm each call; you can switch that off for this tool.

Parameters

Parameters: remove_collaborator
NameTypeDescription
presentation_id required string Presentation ID from list_presentations.
email required string Email from list_collaborators.

tools/call

JSON-RPC

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "beautiful-ai_remove_collaborator",
    "arguments": {
      "presentation_id": "presentation_8c41d2",
      "email": "jane@example.com"
    }
  }
}

Example response

{
  "content": [
    {
      "type": "text",
      "text": "{ ... same JSON as structuredContent ... }"
    }
  ],
  "structuredContent": {
    "presentation_id": "pres_8f3k2m9q",
    "email": "tom@example.com",
    "status": "removed"
  },
  "isError": false
}