Moom MCP Server
About
MCP server for controlling Moom window layouts on macOS through Claude Desktop
Details
- Author
- itrimble
- Downloads
- 250
- Categories
- Other
Jump to
- activate_layout – switch to any saved Moom layout instantly
- save_current_layout – save current window arrangement as a reusable layout
- trigger_moom_action – execute window actions (grow, shrink, move, center, fill‑screen)
- show_moom_menu – display the Moom popup menu
- DisplayPlacer integration for pixel‑perfect multi‑monitor positioning
- Precision coordinate‑based window management
Setting up with Highlight
This MCP is not yet compatible with Highlight’s one-click setup. However, you can still use it with Highlight by following these steps:
- Download and install Highlight from highlightai.com/download
- Navigate to the plugins tab and select "Add Custom Plugin"
-
Configure the plugin with the settings below
Plugin Name
Moom MCP ServerCommand (node, npx, python, etc.)Please refer to the README for specific instructions on how to obtain API keys or other required environment variables.
- Enable "Start Automatically" if you want the plugin to start when Highlight launches
From the repository
Install the server by cloning the repository, running npm install, granting accessibility permissions in System Preferences for Terminal and Claude Desktop, and adding the server configuration to Claude Desktop’s claude_desktop_config.json. After restarting Claude, you can issue natural language commands such as “Switch to my Teaching (Mac Mini) layout” or “Save the current window arrangement as 'Focus Mode'”.
Claude Desktop / Cursor
Paste into your MCP client config file to install this server.
{
"mcpServers": {
"moom mcp server": {
"moom": {
"command": "node",
"args": [
"/absolute/path/to/moom-mcp/src/index.js"
]
}
}
}
}
McpServers
{
"moom": {
"command": "node",
"args": [
"/absolute/path/to/moom-mcp/src/index.js"
]
}
}
Moom MCP Server
A Model Context Protocol (MCP) server that enables programmatic control of 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 installed and running
- Node.js 14 or higher
- Claude Desktop app
- Terminal app with accessibility permissions
- Optional: DisplayPlacer for enhanced multi-monitor support
Installation
1. Clone this repository:
git clone https://github.com/itrimble/moom-mcp.git
cd moom-mcp
2. Install dependencies:
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:
{
"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:
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 displaysEnhanced Layouts
- DisplayPlacer Coding Pro: Precision layout for development - Ultimate Multi-Monitor Pro: Full display utilization across all monitorsInstallation (Optional)
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:
npm test # Basic tests
npm run test-ui # UI automation tests
npm run validate # Validate configuration
Debugging
1. Check if Moom is running:
pgrep -x Moom
2. Verify accessibility permissions are granted
3. Run the validation script:
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 visibleLayouts not activating
- Layout names are case-sensitive - Verify the exact layout name in Moom preferences - Special characters in layout names may need escapingMCP not loading in Claude
- Restart Claude Desktop after configuration changes - Check the config file path is absolute - Verify Node.js is in your PATHContributing
Contributions are welcome! Please feel free to submit a Pull Request.
License
This project is licensed under the MIT License - see the LICENSE file for details.
Author
Ian Trimble - GitHub
Acknowledgments
- Many Tricks for creating Moom
- Anthropic for the Model Context Protocol
- The MCP community for inspiration and examples
Related Projects
Sign in to leave a review
Use Google, GitHub, or an email account so ratings stay tied to real people.
No reviews posted yet.



