keynote-mcp
Apple keynote mcp for local editing
README
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
Security 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.
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 (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) |
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.
- Shape fill limitation: Shape fill color is NOT writable via AppleScript. The skill documents the opacity workaround for dark-theme containers.
- Dark theme color reference: Tested RGB values for white text, gray subtitles, green code comments, and blue section headers.
- Two-column layouts: Proven coordinates for code-left/bullets-right slides using
add_shapecontainers. - 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
Standalone Binary
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".
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
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。