poof-mcp

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.

Category
Visit Server

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:

  1. Accessibility - Required for keyboard input
  2. 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: f1 through f12
  • 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

  1. Session Management: Uses zmx for terminal session persistence
  2. Terminal Control: AppleScript controls macOS Terminal.app for keystrokes and text input
  3. Text Extraction: AppleScript reads Terminal.app content directly

License

MIT

Recommended Servers

playwright-mcp

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.

Official
Featured
TypeScript
Magic Component Platform (MCP)

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.

Official
Featured
Local
TypeScript
Audiense Insights MCP Server

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.

Official
Featured
Local
TypeScript
VeyraX MCP

VeyraX MCP

Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.

Official
Featured
Local
Kagi MCP Server

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.

Official
Featured
Python
graphlit-mcp-server

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.

Official
Featured
TypeScript
E2B

E2B

Using MCP to run code via e2b.

Official
Featured
Neon Database

Neon Database

MCP server for interacting with Neon Management API and databases

Official
Featured
Exa Search

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.

Official
Featured
Qdrant Server

Qdrant Server

This repository is an example of how to create a MCP server for Qdrant, a vector search engine.

Official
Featured