Keynote MCP Server
Provides full programmatic control over Apple Keynote, enabling creation, editing, presenting, and exporting of Keynote presentations through natural language.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Keynote MCP Servercreate a new presentation using the pitch-deck template"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Keynote MCP Server
A Model Context Protocol (MCP) server that provides full programmatic control over Apple Keynote through AppleScript and JXA (JavaScript for Automation). Designed for use with Claude Desktop and any MCP-compatible client, this server lets you create, edit, present, and export Keynote presentations entirely through natural language.
Prerequisites
macOS (any recent version with Keynote installed)
Apple Keynote (free from the Mac App Store)
Node.js 18+ (check with
node --version)Accessibility permissions -- your terminal or IDE must be allowed to control Keynote via System Settings > Privacy & Security > Accessibility
Installation
git clone https://github.com/superdwayne/keynoteMP.git keynote-mcp-server
cd keynote-mcp-server
npm install
npm run buildVerify the build succeeds and types pass:
npx tsc --noEmitClaude Desktop Configuration
Add the following entry to your claude_desktop_config.json (typically located at ~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"keynote": {
"command": "node",
"args": ["/absolute/path/to/keynote-mcp-server/dist/index.js"]
}
}
}Replace /absolute/path/to/keynote-mcp-server with the actual path on your machine. Restart Claude Desktop after saving the configuration.
Tool Reference
The server registers 70 tools across 13 modules. All slide indices are 1-based.
Design Engine (8 tools)
The Design Engine automates professional slide composition with a brand-aware system including 23+ layouts, typography scaling, color harmonies, and presentation templates.
Tool | Parameters | Description |
|
| Composes a complete slide with automatic layout, typography, and color |
|
| Composes multiple slides with consistent branding and layout variety |
|
| Sets brand configuration for subsequent design operations |
| -- | Extracts brand configuration from the active Keynote theme |
|
| Lists all available slide layouts with descriptions and element details |
| -- | Lists all presentation templates with slide counts |
|
| Gets full structure of a template with content hints |
|
| Creates a full presentation from a template |
Available layouts: title-center, title-left, title-bold, section-break, section-gradient, content-left, content-right-image, content-left-image, two-column, three-column, full-image, image-grid, quote, statistic, comparison, closing-cta, closing-thankyou, blank-canvas, timeline, before-after, team-grid, pricing-table, roadmap
Available templates: pitch-deck (10 slides), status-update (5 slides), workshop (8 slides), product-launch (7 slides)
Brand styles: minimal, bold, elegant, playful, corporate
Presentation Management (6 tools)
Tool | Parameters | Description |
|
| Creates a new blank Keynote presentation, optionally with a named theme |
|
| Opens an existing |
|
| Saves the frontmost presentation; provide a path for save-as |
|
| Closes the frontmost presentation |
| -- | Lists all open presentations with names and file paths |
|
| Returns slide count, theme, dimensions, and path for a presentation |
Slide Management (7 tools)
Tool | Parameters | Description |
|
| Adds a new slide at a given position with an optional layout |
|
| Removes a slide by index |
|
| Duplicates a slide at the given index |
|
| Moves a slide from one position to another |
| -- | Returns total number of slides |
| -- | Returns all slides with index, title, and layout name |
| -- | Lists available master slide / layout names for the current theme |
Text Content (7 tools)
Tool | Parameters | Description |
|
| Sets the title text of a slide |
|
| Sets the body text of a slide |
|
| Adds a text box with optional brand-aware typography via |
|
| Updates text content of an existing text item |
|
| Removes a text item from a slide |
|
| Lists all text items on a slide with content, position, and size |
|
| Applies formatting to a text item |
Images & Media (5 tools)
Tool | Parameters | Description |
|
| Adds an image with optional role-based sizing |
|
| Replaces an existing image with a new file |
|
| Removes an image from a slide |
|
| Lists all images on a slide with positions and file names |
|
| Repositions or resizes an existing image |
Presenter Notes (3 tools)
Tool | Parameters | Description |
|
| Sets presenter notes for a slide |
|
| Retrieves presenter notes for a slide |
| -- | Returns all slides' presenter notes as an array |
Themes & Styling (6 tools)
Tool | Parameters | Description |
| -- | Lists available Keynote themes (queries Keynote or falls back to a built-in list) |
|
| Applies a theme to the frontmost presentation |
|
| Sets a solid background color on a slide |
|
| Sets an image as the slide background |
|
| Returns the master slide / layout name for a slide |
|
| Changes a slide's master layout |
Transitions & Animations (6 tools)
Tool | Parameters | Description |
|
| Sets a transition effect on a slide |
|
| Returns current transition settings for a slide |
| -- | Lists all 33 available transition effect names |
|
| Adds a build-in or build-out animation to an item |
|
| Removes an animation from an item |
|
| Lists all build animations for every item on a slide |
Tables & Charts (6 tools)
Tool | Parameters | Description |
|
| Adds a table to a slide |
|
| Sets the value of a specific table cell |
|
| Bulk-sets table data from a 2D array |
|
| Reads all data from a table as a 2D array |
|
| Removes a table from a slide |
|
| Adds a chart to a slide (may fall back to a data table due to AppleScript limitations) |
Live Slideshow Control (6 tools)
Tool | Parameters | Description |
|
| Starts the slideshow from the beginning or a specific slide |
| -- | Stops the currently running slideshow |
| -- | Advances to the next slide or build |
| -- | Goes back to the previous slide or build |
|
| Jumps to a specific slide during the slideshow |
| -- | Returns whether a slideshow is playing and the current slide number |
Export (4 tools)
Tool | Parameters | Description |
|
| Exports the presentation as a PDF |
|
| Exports all slides as individual image files to a directory |
|
| Exports as Microsoft PowerPoint (.pptx) |
|
| Exports a single slide as an image file |
Content Extraction (2 tools)
Tool | Parameters | Description |
|
| Returns all content on a slide: title, body, text items, images, shapes, tables, and notes |
| -- | Returns a structured summary of the entire presentation with per-slide details |
Shapes & Drawing (4 tools)
Tool | Parameters | Description |
|
| Adds a shape with optional brand-aware color via |
|
| Removes a shape from a slide |
|
| Lists all shapes on a slide with position and size |
|
| Modifies a shape's position, size, or styling |
Usage Examples
Design a pitch deck from a template
"Create a pitch deck for my startup using the pitch-deck template with our brand colors #2563EB and an elegant style."Claude will call set_brand, then design_from_template with "pitch-deck", generating all 10 slides with coordinated layouts, typography, and transitions.
Design a single slide with brand-aware styling
"Design slide 3 with the title 'Market Opportunity', body text about the TAM, and use the statistic layout."Claude will call design_slide with the content and layout name, automatically applying brand colors and typography.
Create a presentation from scratch
"Create a new Keynote presentation with the Gradient theme, add 5 slides, and set titles for each one."Claude will call create_presentation, then add_slide five times, and set_slide_title for each slide.
Build a data-driven slide
"On slide 3, add a table with quarterly revenue data: Q1: $1.2M, Q2: $1.5M, Q3: $1.8M, Q4: $2.1M."Claude will use add_table, then set_table_data to populate the cells.
Export for sharing
"Export my presentation as a PDF to the Desktop and also save each slide as a PNG image."Claude will call export_to_pdf and export_to_images with the appropriate paths.
Add brand-aware text and shapes
"Add a heading with role 'display' on slide 1 that says 'Welcome'."Claude will call add_text_item with role: "display", which automatically applies brand-aware font, size, and color with WCAG-compliant contrast.
Architecture
keynote-mcp-server/
src/
index.ts # Entry point -- creates MCP server, registers all tool modules
applescript.ts # AppleScript/JXA execution bridge (runAppleScript, runJXA)
tools/
presentation.ts # create, open, save, close, list, info
slides.ts # add, delete, duplicate, move, count, list, layouts
text.ts # title, body, text items, formatting (brand-aware via role)
images.ts # add, replace, delete, list, reposition (role-based sizing)
notes.ts # set, get, get-all presenter notes
theme.ts # themes, backgrounds, master slides
transitions.ts # slide transitions, build animations
tables-charts.ts # tables (CRUD + bulk data), charts
slideshow.ts # start, stop, next, previous, go-to, status
export.ts # PDF, images, PowerPoint, single-slide export
content.ts # read slide content, full presentation summary
shapes.ts # add, delete, list, update shapes (brand-aware via role)
design.ts # design_slide, design_deck, set_brand, get_brand, list_layouts,
# list_templates, get_template, design_from_template
design/
tokens.ts # Design tokens (spacing, margins, canvas sizes)
color.ts # Color math, harmonies, WCAG contrast
typography.ts # Type scale system (8 roles, modular scale)
grid.ts # 12-column, 8-row grid system
layouts.ts # Layout definition schema
layout-library.ts # 23+ pre-built slide layouts
brand.ts # Brand configuration, theme extraction
brand-state.ts # Shared brand state across all tool modules
balance.ts # Visual balance and whitespace utilities
accents.ts # Decorative accent generation
variations.ts # Layout variation engine (mirror, shift, toggle)
composer.ts # Slide/deck composition orchestration
templates.ts # Presentation templates (pitch-deck, status-update, etc.)
progress.ts # Progress indicators for multi-slide decks
dist/ # Compiled JavaScript output (generated by `npm run build`)
package.json
tsconfig.jsonThe server uses stdio transport (standard for local MCP servers). Each tool module exports a register*Tools(server) function that registers tools with the MCP server instance. All Keynote automation is performed by shelling out to osascript via child_process.execFile, using either AppleScript or JXA depending on the operation.
Troubleshooting
"AppleScript error: Not authorized to send Apple events"
Your terminal or IDE needs Accessibility permissions. Go to System Settings > Privacy & Security > Accessibility and add your terminal application (Terminal.app, iTerm2, VS Code, etc.).
You may also need to grant permissions under Privacy & Security > Automation to allow your terminal to control Keynote.
"Keynote got an error: Can't get document 1"
No Keynote presentation is currently open. Use create_presentation or open_presentation first.
Build errors
Make sure you have Node.js 18+ installed and run npm install before npm run build. The project requires TypeScript and the MCP SDK as dependencies.
Keynote must be installed
This server controls Keynote.app via AppleScript. It will not work without Keynote installed. Keynote is free from the Mac App Store.
Chart creation limitations
Direct chart creation via AppleScript is limited in some Keynote versions. The add_chart tool will attempt to create a chart directly but may fall back to creating a data table with your values. You can then manually convert that table to a chart in Keynote.
Timeout errors
Each AppleScript command has a 30-second timeout. Operations on very large presentations or complex exports may occasionally time out. If this happens, try the operation again or work with fewer slides at a time.
License
MIT
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/superdwayne/keynoteMP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server