poof-mcp
An MCP server that enables AI agents to control the macOS Terminal.app using AppleScript and the zmx session manager. It allows agents to send keystrokes, type text, and capture screen output in real-time.
README
poof-mcp
An MCP (Model Context Protocol) server that provides AI agents with real terminal control capabilities on macOS.
Features
- Terminal session management via zmx
- Visible Terminal.app windows - watch the AI work in real-time
- Keystroke control - send individual keys or modifier combinations
- Text typing - fast text input
- Screen text capture - read terminal content as plain text
- Wait helpers - wait for text or screen stability
- Resize & restart - control terminal dimensions and restart sessions
Prerequisites
1. zmx - Terminal session manager
# macOS (Apple Silicon)
curl -LO https://zmx.sh/a/zmx-0.0.2-macos-aarch64.tar.gz
tar -xzf zmx-0.0.2-macos-aarch64.tar.gz
mv zmx ~/.local/bin/
# macOS (Intel)
curl -LO https://zmx.sh/a/zmx-0.0.2-macos-x86_64.tar.gz
tar -xzf zmx-0.0.2-macos-x86_64.tar.gz
mv zmx ~/.local/bin/
2. macOS Permissions
poof-mcp uses AppleScript to control Terminal.app, which requires permissions:
- Accessibility - Required for keyboard input
- Automation - Required to control Terminal.app
Note: On first use, you may see macOS permission dialogs. Grant access to the app running the MCP server (e.g., Claude, VS Code, Terminal).
Installation
# Clone the repository
git clone https://github.com/mattapperson/poof-mcp.git
cd poof-mcp
# Install dependencies (including native modules)
bun install
Usage
As an MCP Server
Add to your Claude Code MCP configuration:
claude mcp add poof-mcp -- /path/to/poof-mcp/bin/poof-mcp
Or add to ~/.claude/claude_desktop_config.json:
{
"mcpServers": {
"poof-mcp": {
"command": "/path/to/poof-mcp/bin/poof-mcp"
}
}
}
CLI
./bin/poof-mcp --help # Show help
./bin/poof-mcp --version # Show version
./bin/poof-mcp # Start MCP server (stdio)
MCP Tools
| Tool | Description |
|---|---|
send_keystrokes |
Send key presses (e.g., ["enter"], ["up", "up", "enter"]) |
type_text |
Type a string |
get_screen_text |
Get screen as plain text |
get_status |
Get terminal status |
list_sessions |
List active sessions |
kill_session |
Kill a session |
create_session |
Create new zmx session + open Terminal.app |
resize_terminal |
Resize the terminal |
restart_terminal |
Restart the terminal (optionally with a new command) |
wait_for_text |
Wait for text to appear on screen (5s default timeout) |
wait_for_stable |
Wait for screen to stop changing (500ms stable duration) |
Keystroke Examples
The send_keystrokes tool supports:
- Single characters:
a,b,1, etc. - Special keys:
enter,tab,escape,space,backspace - Arrow keys:
up,down,left,right - Function keys:
f1throughf12 - Modifiers:
ctrl+c,alt+f,shift+a,cmd+v
Development
# Run in development mode
bun run dev
Architecture
Claude Code (AI Agent)
↓ (JSON-RPC over stdio)
MCP Server (TypeScript/Bun)
↓
Terminal Manager
├── zmx commands (session management)
└── AppleScript (Terminal.app control)
↓
macOS Terminal.app + zmx session
How It Works
- Session Management: Uses zmx for terminal session persistence
- Terminal Control: AppleScript controls macOS Terminal.app for keystrokes and text input
- Text Extraction: AppleScript reads Terminal.app content directly
License
MIT
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.