loading…
Search for a command to run...
loading…
MCP server for full control of Apple Keynote through AppleScript automation. Create, edit, and export presentations via natural language with 30+ tools covering
MCP server for full control of Apple Keynote through AppleScript automation. Create, edit, and export presentations via natural language with 30+ tools covering slides, content, layout, and Unsplash image integration. Ships with a Claude Skill for design patterns and font workarounds.
License: MIT Python 3.10+ PyPI macOS
An MCP server that gives AI full control over Apple Keynote through AppleScript automation. Create, edit, and export presentations — all via natural language.
Ships with a Claude Skill that encodes layout rules, font workarounds, and design patterns so presentations come out right on the first try.
pip install keynote-mcp
Or run directly with uvx (no install needed):
uvx keynote-mcp
git clone https://github.com/ByAxe/keynote-mcp.git
cd keynote-mcp
python -m venv .venv
source .venv/bin/activate
pip install -e .
Claude Code (PyPI install / uvx):
claude mcp add keynote-mcp keynote-mcp
Claude Code (from source):
claude mcp add keynote-mcp "bash -c cd $(pwd) && .venv/bin/python -m keynote_mcp"
Claude Desktop — add to claude_desktop_config.json:
{
"mcpServers": {
"keynote-mcp": {
"command": "keynote-mcp",
"env": {
"UNSPLASH_KEY": "your_key_here"
}
}
}
}
Or if using uvx:
{
"mcpServers": {
"keynote-mcp": {
"command": "uvx",
"args": ["keynote-mcp"],
"env": {
"UNSPLASH_KEY": "your_key_here"
}
}
}
}
Other MCP clients:
keynote-mcp (if installed via pip) or uvx keynote-mcpThe keynote-presentation skill teaches Claude how to use the MCP tools correctly — handling font clipping bugs, theme pitfalls, coordinate math, and design patterns.
Claude Code — copy the skill folder to your skills directory:
cp -r skills/keynote-presentation ~/.claude/skills/keynote-presentation
Claude.ai:
skills/keynote-presentation folderSecurity note: Accessibility permissions are granted per-binary, not per-project. When you grant Accessibility access to
python, all Python processes share that permission. Most keynote-mcp tools use plain AppleScript (no Accessibility needed) — only build animations require it. For stricter isolation, you can build a standalone binary (see Standalone Binary below) so keynote-mcp gets its own permission entry.
"Create a presentation about our Q1 results with 6 slides"
"Add a slide with a code example showing the API"
"Export the presentation as PDF"
| Category | Tools |
|---|---|
| Presentation | create, open, save, close, list, themes, resolution, slide size |
| Slides | add, delete, duplicate, move, select, layouts, slide info |
| Content | text boxes (with font/color control), titles, subtitles, bullet lists, numbered lists, code blocks (with color), quotes, images, shapes (with opacity), edit, delete, move, resize elements, set element opacity, clear slide, speaker notes, build-in animations (add/remove via UI scripting) |
| Export | screenshot slides, export PDF |
| Unsplash | search images, add to slides, random images (requires UNSPLASH_KEY) |
cp env.example .env
# Add your key from https://unsplash.com/developers
# UNSPLASH_KEY=your_access_key
The keynote-presentation skill (skills/keynote-presentation/) solves real problems discovered through production use:
add_shape containers.skills/keynote-presentation/
SKILL.md # Main skill file with YAML frontmatter
references/
theme-reference.md # Theme compatibility table
coordinate-reference.md # Layout math and centering formulas
src/
keynote_mcp/
__init__.py # Package version
__main__.py # python -m keynote_mcp entry point
server.py # MCP server — routes tool calls via stdio
tools/
presentation.py # Presentation lifecycle tools
slide.py # Slide management tools
content.py # Content creation and editing tools
export.py # Screenshot and PDF export tools
unsplash.py # Unsplash image integration
utils/
applescript_runner.py # Executes AppleScript via osascript
error_handler.py # Exception hierarchy and validation
applescript/ # AppleScript source files
skills/ # Claude Skills for this MCP
tests/ # Test scaffolding
For security-conscious users who don't want to grant Accessibility permissions to the shared python binary, you can build keynote-mcp as a standalone executable with its own permission entry:
# Install pyinstaller
pip install pyinstaller
# Build standalone binary (~31MB)
pyinstaller --onefile --name keynote-mcp src/keynote_mcp/__main__.py
# Code-sign so macOS tracks it as its own app
codesign -s - -f dist/keynote-mcp
Then use the binary in your MCP config:
{
"mcpServers": {
"keynote-mcp": {
"command": "/absolute/path/to/dist/keynote-mcp"
}
}
}
When you grant Accessibility permission, it will appear as "keynote-mcp" instead of "Python".
See CONTRIBUTING.md for details.
MIT — see LICENSE.
Run in your terminal:
claude mcp add byaxe-keynote-mcp -- npx Extract design specs and assets
by FigmaEnables AI agents to read, write, and edit Office documents via LibreOffice with token-efficient design. Supports multiple formats including DOCX, XLSX, PPTX, a
by passerbyflutterSearch and retrieve company logos by brand or domain. Customize size, format, and theme to match your design needs. Accelerate design, prototyping, and content
by NOVA-3951Enables GUI automation for controlling PIX4Dmatic on Windows through MCP. Supports launching, focusing, capturing screenshots, sending hotkeys, clicking UI elem
by jangjo123Not sure what to pick?
Find your stack in 60 seconds
Author?
Embed badge for your README
Browse similar
All design MCPs