Skip to main content

MCP server for inter-session communication between Claude Code sessions in iTerm2

Project description

claude-mux-iterm

MCP server enabling communication between Claude Code sessions in iTerm2 panes.

Primary use case: Notify other sessions when PR is merged to main so they can pull latest changes.

Installation

pip install claude-mux-iterm

Or with uv:

uv pip install claude-mux-iterm

Configuration

Add to your Claude Code MCP settings (~/.claude/settings.json or project-level):

{
  "mcpServers": {
    "claude-mux-iterm": {
      "command": "uvx",
      "args": ["claude-mux-iterm"]
    }
  }
}

Or if installed with pip:

{
  "mcpServers": {
    "claude-mux-iterm": {
      "command": "claude-mux-iterm"
    }
  }
}

Tools

register_session(task_id)

Register the current iTerm2 session with a task ID. This allows other sessions to find and communicate with this session.

register_session("task-a")

list_sessions()

List all registered active sessions.

list_sessions()

send_message(target_task_id, content, source_task_id)

Send a message to a specific session.

send_message("task-b", "PR merged to main, please pull latest", "task-a")

broadcast_message(content, source_task_id)

Send a message to all other active sessions.

broadcast_message("PR #123 merged to main, please pull latest", "task-a")

list_messages(current_task_id, unread_only)

List messages received by this session.

list_messages("task-a", unread_only=True)

acknowledge_message(message_id, current_task_id)

Mark a message as read/acknowledged.

acknowledge_message("msg_abc123", "task-a")

Usage Example

Pane 1 (working on feature branch):

# Register this session
register_session("feature-auth")

# Check for messages periodically
list_messages("feature-auth", unread_only=True)

Pane 2 (just merged a PR):

# Register this session
register_session("main-work")

# Notify all other sessions about the merge
broadcast_message("PR #42 merged to main with auth changes - please pull latest", "main-work")

Message Format

Messages are injected into sessions using a wire format:

[CLAUDE-MUX-ITERM-MESSAGE]{"message_id":"msg_abc123",...}[/CLAUDE-MUX-ITERM-MESSAGE]

Claude Code sessions can parse this format to extract the message content.

Storage

Session registrations and messages are stored in:

~/.claude-mux-iterm/
├── sessions/
│   └── {task_id}.json           # Session registrations
└── messages/
    └── {task_id}/
        ├── inbox/               # Received messages
        ├── outbox/              # Sent messages
        └── delivered/           # Acknowledged messages

Requirements

  • macOS (uses iTerm2 AppleScript)
  • iTerm2 running
  • Python 3.10+

Development

# Clone the repo
git clone https://github.com/GrigoriLab/claude-mux-iterm
cd claude-mux-iterm

# Install with dev dependencies
uv pip install -e ".[dev]"

# Run tests
uv run pytest

# Run type checking
uv run mypy src

# Run linting
uv run ruff check src tests

License

MIT License - see LICENSE file.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

claude_mux_iterm-0.1.0.tar.gz (87.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

claude_mux_iterm-0.1.0-py3-none-any.whl (14.8 kB view details)

Uploaded Python 3

File details

Details for the file claude_mux_iterm-0.1.0.tar.gz.

File metadata

  • Download URL: claude_mux_iterm-0.1.0.tar.gz
  • Upload date:
  • Size: 87.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for claude_mux_iterm-0.1.0.tar.gz
Algorithm Hash digest
SHA256 3e39a7e408a31cf5d4dc2265e1ebd340a64633cc882581a6980e91d2b8aee3ec
MD5 a52c3f68de7f8bf5f81a3054dcb8e1b1
BLAKE2b-256 806e9080a89125f8ef0b8d1a8f22774b4a76ed3b87bff6cb194cf0d979181174

See more details on using hashes here.

File details

Details for the file claude_mux_iterm-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: claude_mux_iterm-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 14.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for claude_mux_iterm-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 433855679d946a964d3e144453fee35ff88aff1616728a2e3291c8378c991457
MD5 588259b2d041741610ba1d1a9fc9ce77
BLAKE2b-256 911a7bae8d613eb7ebd0ce85f00807eaa4069636aef7676fe027a36d82791719

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page