MCP Tools Reference
Impresent provides a Model Context Protocol (MCP) endpoint that allows AI agents to create, edit, and manage presentations programmatically. This enables AI assistants like Claude to build complete presentations through natural conversation.
Overview
The MCP endpoint uses Streamable HTTP transport at:
https://api.impresent.dev/mcp
MCP tools have direct access to the database and storage, providing efficient operations without REST API overhead.
Client Configuration
Configure your MCP client to connect to Impresent:
{
"mcpServers": {
"impresent": {
"url": "https://api.impresent.dev/mcp",
"headers": {
"Authorization": "Bearer imp_your_api_key_here"
}
}
}
}
Claude Desktop
Add to your Claude Desktop configuration file:
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"impresent": {
"url": "https://api.impresent.dev/mcp",
"headers": {
"Authorization": "Bearer imp_your_api_key_here"
}
}
}
}
Available Tools
list_templates
Browse available presentation templates.
Parameters: None
Returns:
{
"templates": [
{
"id": "minimal",
"name": "minimal",
"description": "Clean, lots of whitespace",
"layouts": ["lead", "two-column", "section"]
}
]
}
Example conversation:
“What templates are available?”
create_deck
Create a new presentation in cloud storage.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
slug | string | Yes | URL-friendly identifier |
title | string | No | Display title |
markdown | string | Yes | Full markdown content |
templateId | string | No | Template to use (default: minimal) |
Returns:
{
"id": "deck_abc123",
"slug": "my-presentation",
"title": "My Presentation"
}
Example conversation:
“Create a presentation called ‘Q3 Results’ with three slides: a title slide, a slide about revenue growth, and a summary slide.”
get_deck
Retrieve a deck’s full content.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | No | Deck ID |
slug | string | No | Deck slug |
One of id or slug must be provided.
Returns:
{
"id": "deck_abc123",
"slug": "my-presentation",
"title": "My Presentation",
"markdown": "---\nmarp: true\n...",
"templateId": "minimal"
}
Example conversation:
“Show me the content of my ‘quarterly-review’ presentation.”
update_deck
Replace the entire deck content.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
id | string | Yes | Deck ID |
markdown | string | Yes | New markdown content |
title | string | No | New title |
templateId | string | No | New template |
Returns:
{
"id": "deck_abc123",
"updated": true
}
Example conversation:
“Replace the entire presentation with this new content…”
edit_slide
Modify a single slide by index.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
deckId | string | Yes | Deck ID |
slideIndex | number | Yes | 0-based slide index |
content | string | Yes | New slide content |
Returns:
{
"deckId": "deck_abc123",
"slideIndex": 2,
"updated": true
}
Example conversation:
“Change slide 3 to show our new product features.”
add_slide
Insert a new slide at a specific position.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
deckId | string | Yes | Deck ID |
position | number | Yes | Insert position (0-based) |
content | string | Yes | Slide content |
Returns:
{
"deckId": "deck_abc123",
"position": 3,
"totalSlides": 8
}
Example conversation:
“Add a new slide after the introduction about our team.”
remove_slide
Delete a slide by index.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
deckId | string | Yes | Deck ID |
slideIndex | number | Yes | 0-based slide index |
Returns:
{
"deckId": "deck_abc123",
"removed": true,
"totalSlides": 6
}
Example conversation:
“Remove the fourth slide.”
apply_template
Change the template for a deck.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
deckId | string | Yes | Deck ID |
templateId | string | Yes | New template ID |
Returns:
{
"deckId": "deck_abc123",
"templateId": "corporate",
"applied": true
}
Example conversation:
“Switch this presentation to use the corporate template.”
render_deck
Export a deck to HTML, PDF, or PowerPoint.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
deckId | string | Yes | Deck ID |
format | string | Yes | html, pdf, or pptx |
Returns:
{
"url": "https://storage.impresent.dev/renders/abc123.pdf",
"format": "pdf",
"expiresAt": "2024-01-15T12:00:00Z"
}
Example conversation:
“Export my presentation as a PDF.”
preview_deck
Open an interactive slide viewer/editor.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
deckId | string | Yes | Deck ID |
Returns:
This tool returns a UI resource that renders an interactive presenter in the MCP client:
{
"content": [{ "type": "text", "text": "Opening presenter..." }],
"_meta": {
"ui": { "resourceUri": "ui://impresent/presenter" }
}
}
The presenter UI allows:
- Slide-by-slide navigation
- Template switching
- Live editing with instant preview
- Export actions
Example conversation:
“Open a preview of my presentation.”
list_decks
List all presentations in your account.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
limit | number | No | Max results (default: 20) |
offset | number | No | Pagination offset |
Returns:
{
"decks": [
{
"id": "deck_abc123",
"slug": "quarterly-review",
"title": "Q3 2024 Review",
"updatedAt": "2024-01-15T14:22:00Z"
}
],
"total": 15
}
Example conversation:
“What presentations do I have?”
upload_asset
Upload an image or other file for use in presentations.
Parameters:
| Parameter | Type | Required | Description |
|---|---|---|---|
filename | string | Yes | Filename with extension |
content | string | Yes | Base64-encoded file content |
mimeType | string | Yes | MIME type (e.g., image/png) |
Returns:
{
"id": "asset_xyz789",
"uri": "asset://asset_xyz789",
"filename": "logo.png"
}
Use the returned URI in your markdown:

Example conversation:
“Upload this logo image and add it to the title slide.”
Example Workflows
Creating a Complete Presentation
- User: “Create a presentation about our new product launch”
- Agent uses
list_templatesto show options - User: “Use the corporate template”
- Agent uses
create_deckwith generated content - User: “Add a slide with a comparison table”
- Agent uses
add_slideto insert new content - User: “Preview it”
- Agent uses
preview_deckto open the viewer - User: “Export as PDF”
- Agent uses
render_deckand provides download link
Editing an Existing Presentation
- User: “Open my quarterly review presentation”
- Agent uses
get_deckwith slugquarterly-review - User: “Update the revenue numbers on slide 3”
- Agent uses
edit_slidewith new content - User: “Change to the dark template”
- Agent uses
apply_template - User: “Show me the preview”
- Agent uses
preview_deck
Error Handling
MCP tools return standard JSON-RPC errors:
{
"error": {
"code": -32602,
"message": "Deck not found",
"data": {
"deckId": "deck_invalid"
}
}
}
Common error codes:
| Code | Description |
|---|---|
-32600 | Invalid request |
-32601 | Method not found |
-32602 | Invalid params |
-32603 | Internal error |
Best Practices for AI Agents
- Start with
list_decksto understand what presentations exist - Use
get_deckbefore editing to see current content - Prefer
edit_slideoverupdate_deckfor targeted changes - Use
preview_deckto show users their presentation visually - Confirm destructive actions like
remove_slidebefore executing