Keynote MCP
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.
Quick Start
Prerequisites
- macOS 10.14+
- Keynote application installed
- Python 3.10+
Option A: Install from PyPI
pip install keynote-mcp
Or run directly with uvx (no install needed):
uvx keynote-mcp
Option B: Install from source
git clone https://github.com/ByAxe/keynote-mcp.git
cd keynote-mcp
python -m venv .venv
source .venv/bin/activate
pip install -e .
Register the MCP server
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:
- Command:
keynote-mcp(if installed via pip) oruvx keynote-mcp - Transport: stdio
3. Install the Skill (recommended)
The 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:
- Zip the
skills/keynote-presentationfolder - Go to Settings > Capabilities > Skills
- Click "Upload skill" and select the zip
4. macOS permissions
- System Settings > Privacy & Security > Accessibility — add Terminal/your IDE
- System Settings > Privacy & Security > Automation — allow Python to control Keynote
5. Use it
"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"
Available Tools (30+)
| Category | Tools |
|---|---|
| Presentation | create, open, save, close, list, themes, resolution, slide size |
| Slides | add, delete, duplicate, move, select, layouts, slide info |
| Content | text boxes, titles, subtitles, bullet lists, numbered lists, code blocks, quotes, images, edit, delete, move, resize elements, speaker notes |
| Export | screenshot slides, export PDF |
| Unsplash | search images, add to slides, random images (requires UNSPLASH_KEY) |
Unsplash Integration (optional)
cp env.example .env
# Add your key from https://unsplash.com/developers
# UNSPLASH_KEY=your_access_key
About the Skill
The keynote-presentation skill (skills/keynote-presentation/) solves real problems discovered through production use:
- Font clipping bug: Large font sizes (>48pt) create tiny text boxes that clip text to 1-2 characters. The skill teaches Claude the resize-then-edit workaround.
- Theme pitfalls: Many themes (Gradient, Minimalist Dark) don't show backgrounds on Blank slides. The skill includes a tested compatibility table.
- Coordinate math: No text-align property exists. The skill provides per-character width estimates for manual centering.
- Design patterns: Landing-page-style slide templates (hero, statement, bullets, code demo, closing) with tested positions.
Skill structure
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
Project Structure
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
Contributing
See CONTRIBUTING.md for details.
License
MIT — see LICENSE.
Acknowledgments
- Model Context Protocol — standardized tool protocol for AI
- Unsplash — free high-quality images
- AppleScript — macOS automation
- Original project by easychen
Metadata
Release files for keynote-mcp 1.0.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| keynote_mcp-1.0.0.tar.gz | 33.5 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| keynote_mcp-1.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 68.7 kB
Release files / keynote_mcp-1.0.0.tar.gz
| Download URL | keynote_mcp-1.0.0.tar.gz |
|---|---|
| Size | 33.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
7fe381cef812bcf219057348ae93bfc68af623effda23e6fd55980e85a8c03a4
|
|
BLAKE2b-256 checksum How to use checksums |
c4f14b00ffaf61679a5bd3dbbb6a8230daac256fd7d5b40776f47ad5bc97f2db
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.9
|
Release files / keynote_mcp-1.0.0-py3-none-any.whl
| Download URL | keynote_mcp-1.0.0-py3-none-any.whl |
|---|---|
| Size | 35.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
ac968aaf132f426177ec6f3043009fb40a06bbf2d583be2bb6d959f684a7cd11
|
|
BLAKE2b-256 checksum How to use checksums |
a2c5c4a9c2eae6b67633f1e55b9b2923cd42299d735aac4c77fc550599b91940
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.9
|
Security for keynote-mcp 1.0.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.