Skip to main content
Glama
itrimble

Moom MCP Server

by itrimble
README.md
# Moom MCP Server

A Model Context Protocol (MCP) server that enables programmatic control of [Moom](https://manytricks.com/moom/) window layouts on macOS through natural language commands in Claude Desktop.

## Overview

This MCP server allows Claude to interact with Moom, a powerful macOS window management tool, enabling you to:
- Switch between saved window layouts
- Create new window arrangements with pixel-perfect precision
- Control window positioning and sizing across multiple monitors
- Manage your workspace layouts through conversational commands
- **NEW**: DisplayPlacer integration for exact multi-monitor positioning

## Features

- šŸ–¼ļø **activate_layout** - Instantly switch to any saved Moom layout
- šŸ’¾ **save_current_layout** - Save your current window arrangement as a reusable layout
- šŸŽÆ **trigger_moom_action** - Execute Moom window actions (resize, move, center, etc.)
- šŸ“‹ **show_moom_menu** - Display the Moom popup menu
- šŸ–„ļø **DisplayPlacer Integration** - Pixel-perfect multi-monitor window positioning
- šŸ“ **Precision Layouts** - Exact coordinate-based window management

## Prerequisites

- macOS (10.12 or later)
- [Moom](https://manytricks.com/moom/) installed and running
- Node.js 14 or higher
- [Claude Desktop](https://claude.ai/download) app
- Terminal app with accessibility permissions
- **Optional**: [DisplayPlacer](https://github.com/jakehilborn/displayplacer) for enhanced multi-monitor support

## Installation

1. Clone this repository:
   ```bash
   git clone https://github.com/itrimble/moom-mcp.git
   cd moom-mcp
   ```

2. Install dependencies:
   ```bash
   npm install
   ```

3. Grant accessibility permissions:
   - Open **System Preferences** → **Security & Privacy** → **Privacy** → **Accessibility**
   - Add and enable Terminal (or your terminal app)
   - Add and enable Claude Desktop

4. Add to Claude Desktop configuration:
   - Open Claude Desktop
   - Navigate to Settings → Developer → Edit Config
   - Add the following to your `claude_desktop_config.json`:

   ```json
   {
     "mcpServers": {
       "moom": {
         "command": "node",
         "args": ["/absolute/path/to/moom-mcp/src/index.js"]
       }
     }
   }
   ```

5. Restart Claude Desktop

## Usage

Once installed, you can use natural language commands in Claude Desktop:
### Activating Layouts
- "Switch to my Teaching (Mac Mini) layout"
- "Activate the AI Research Mode workspace"
- "Use my coding layout"
- **NEW**: "Switch to DisplayPlacer Coding Pro" (pixel-perfect positioning)

### Saving Layouts
- "Save the current window arrangement as 'Focus Mode'"
- "Create a new layout called 'Video Editing'"

### Window Actions
- "Make this window bigger" (grow)
- "Center the active window"
- "Move window to the left"
- "Fill the screen with current window"

### Menu Access
- "Show the Moom menu"
- "Open Moom's layout picker"

### Multi-Monitor Precision (NEW)
- "Create a DisplayPlacer coding layout" (uses exact coordinates)
- "Position windows with pixel precision"
- "Optimize for my 4K display setup"

## Available Commands

| Command | Description | Example |
|---------|-------------|---------|
| `activate_layout` | Switch to a saved Moom layout | `{ "layoutName": "Teaching (Mac Mini)" }` |
| `save_current_layout` | Save current window arrangement | `{ "layoutName": "Development Setup" }` |
| `trigger_moom_action` | Execute window actions | `{ "action": "center" }` |
| `show_moom_menu` | Display Moom popup menu | `{}` |

### Supported Window Actions

- `grow` - Increase window size
- `shrink` - Decrease window size
- `move-left` - Move window left
- `move-right` - Move window right
- `move-up` - Move window up
- `move-down` - Move window down
- `center` - Center window on screen
- `fill-screen` - Maximize window

## DisplayPlacer Integration

The server now includes advanced multi-monitor support using [DisplayPlacer](https://github.com/jakehilborn/displayplacer):

### Benefits
- **Pixel-perfect positioning** using exact display coordinates
- **Multi-monitor awareness** with proper origin calculation
- **4K display optimization** with scaling consideration
- **High refresh rate support** (120Hz+)
- **Negative coordinate handling** for left-positioned displays

### Enhanced Layouts
- **DisplayPlacer Coding Pro**: Precision layout for development
- **Ultimate Multi-Monitor Pro**: Full display utilization across all monitors

### Installation (Optional)
```bash
brew install jakehilborn/jakehilborn/displayplacer
```

## Project Structure

```
moom-mcp/
ā”œā”€ā”€ src/
│   ā”œā”€ā”€ index.js                    # Main MCP server implementation
│   └── displayplacer-layouts.js    # DisplayPlacer integration module
ā”œā”€ā”€ examples.md         # Usage examples and workflows
ā”œā”€ā”€ test.js            # Basic functionality tests
ā”œā”€ā”€ test-ui.js         # UI automation tests
ā”œā”€ā”€ validate.js        # Configuration validator
ā”œā”€ā”€ demo.js            # Feature demonstration
ā”œā”€ā”€ package.json       # Node.js configuration
ā”œā”€ā”€ LICENSE            # MIT License
└── README.md          # This file
```

## Development

### Testing

Run the test suite:
```bash
npm test          # Basic tests
npm run test-ui   # UI automation tests
npm run validate  # Validate configuration
```

### Debugging

1. Check if Moom is running:
   ```bash
   pgrep -x Moom
   ```

2. Verify accessibility permissions are granted
3. Run the validation script:
   ```bash
   npm run validate
   ```

## Troubleshooting

### "Error accessing Moom menu"
- Ensure Moom is running
- Verify accessibility permissions for Terminal and Claude Desktop
- Check that Moom's menu bar icon is visible

### Layouts not activating
- Layout names are case-sensitive
- Verify the exact layout name in Moom preferences
- Special characters in layout names may need escaping

### MCP not loading in Claude
- Restart Claude Desktop after configuration changes
- Check the config file path is absolute
- Verify Node.js is in your PATH

## Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

## License

This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.

## Author

**Ian Trimble** - [GitHub](https://github.com/itrimble)

## Acknowledgments

- [Many Tricks](https://manytricks.com/) for creating Moom
- [Anthropic](https://anthropic.com/) for the Model Context Protocol
- The MCP community for inspiration and examples

## Related Projects

- [Model Context Protocol](https://github.com/anthropics/model-context-protocol)
- [Moom by Many Tricks](https://manytricks.com/moom/)

TDQS

B3.4/5.0

Scored across 11 tools

Disambiguation4/5

Most tools have distinct purposes, but there is some potential overlap between 'activate_layout' and 'trigger_moom_action' (which could include layout activation), and 'create_custom_grid_layout' and 'create_quad_layout' are both layout creation tools with different grid types. Descriptions help clarify, but an agent might occasionally misselect between these similar functions.

Naming Consistency5/5

Tool names follow a consistent verb_noun pattern throughout, such as 'activate_layout', 'create_custom_grid_layout', 'get_monitors', and 'list_layouts'. All tools use snake_case with clear, descriptive verbs, making the set predictable and easy to navigate.

Tool Count5/5

With 11 tools, the count is well-scoped for a Moom window management server, covering layout activation, creation, monitoring, window control, and application launching. Each tool appears to serve a specific, useful function without unnecessary redundancy or bloat.

Completeness4/5

The toolset provides comprehensive coverage for window layout management, including CRUD-like operations (list, create, save, activate layouts), window positioning, and monitor configuration. A minor gap is the lack of a tool to delete or modify existing layouts, which could limit full lifecycle management, but core workflows are well-supported.

Maintenance

ActivityInactive
ResponsivenessNo issues