Skip to main content
Glama
README.md
# iterm2-mcp

An MCP server that provides full control over iTerm2.

## Prerequisites

1. iTerm2 running on macOS.
2. **Preferences > General > Magic > "Enable Python API"** must be checked.
3. Install iTerm2 [shell integration](https://iterm2.com/documentation-shell-integration.html)
   in your shell. `run_command` and session variables like `path`/`jobName` depend on it.
   Without it, `run_command` falls back to its timeout.

The first time the server connects, iTerm2 will prompt you to approve the binary. Approve once; subsequent launches are automatic.

## Install

```bash
uv tool install iterm2-mcp
```

Or from source:

```bash
git clone https://github.com/lorencarvalho/iterm2-mcp.git
cd iterm2-mcp
uv sync
```

## Register with Claude

**Claude Code:**

```bash
claude mcp add iterm2 -- uvx iterm2-mcp
```

**Claude Desktop** — add to `~/Library/Application Support/Claude/claude_desktop_config.json`:

```json
{
  "mcpServers": {
    "iterm2": {
      "command": "uvx",
      "args": ["iterm2-mcp"]
    }
  }
}
```

## Security

This server can type into terminals, run commands, and close sessions — anything
you can do in iTerm2. Only connect it to MCP clients you trust. It has no
sandboxing beyond what iTerm2 itself provides.

## Tools

Most tools accept an optional `session_id` — omit it to target the currently active
session.

| Tool | Purpose |
| --- | --- |
| `list_sessions` | Tree of windows/tabs/sessions with IDs |
| `get_active_session` | ID and name of the focused session |
| `focus_session` | Bring a session to the foreground |
| `write_to_terminal` | Send text (optionally with newline) |
| `send_control_character` | Send Ctrl-C, Ctrl-D, Ctrl-Z, ESC, etc. |
| `send_escape_sequence` | Send a raw ANSI escape (e.g. `\x1b[2J`) |
| `read_screen` | Read the visible screen as plain text |
| `get_cursor_position` | Current cursor `(x, y)` |
| `run_command` | Send a command and wait for `COMMAND_END` |
| `create_window` | Open a new iTerm2 window |
| `create_tab` | Open a new tab |
| `split_pane` | Split a pane horizontally or vertically |
| `close_session` | Close a specific session |
| `set_session_name` | Rename a session |
| `set_badge` | Set the iTerm2 badge text |
| `clear_buffer` | Clear screen and scrollback |
| `list_profiles` | Enumerate iTerm2 profiles |
| `get_variable` | Read an iTerm2 session variable |

## Development

```bash
uv sync
uv run ruff check
uv run ruff format
uv run ty check
```

## License

MIT

TDQS

A3.9/5.0

Scored across 18 tools

Disambiguation5/5

Each tool targets a distinct action (e.g., clear, close, create, focus, get, list, read, run, send, set, split, write). Even closely related tools like write_to_terminal and send_control_character have clear differentiation through descriptions.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern in snake_case (e.g., clear_buffer, create_tab, get_variable, set_badge). No mixing of conventions or ambiguous prefixes.

Tool Count4/5

18 tools is slightly above the typical 5-15 range, but each tool has a well-defined purpose covering window, tab, session, and terminal operations. No obvious bloat.

Completeness4/5

Covers core CRUD and lifecycle operations for sessions/tabs/windows, plus screen reading, command execution, variable access, and profile listing. Minor gaps like missing pane resizing or session info retrieval, but nothing critical for automation.

Maintenance

ActivityInactive
ResponsivenessNo issues