Skip to main content
Glama
itrimble

Moom MCP Server

by itrimble

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

Related MCP server: MCP Memory Server

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 displays

Enhanced Layouts

  • DisplayPlacer Coding Pro: Precision layout for development

  • Ultimate Multi-Monitor Pro: Full display utilization across all monitors

Installation (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 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 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

Available Tools

11 tools
activate_layoutC

Activate a specific Moom layout by name

ParametersJSON Schema
NameRequiredDescriptionDefault
layoutNameYesName of the layout to activate (e.g., "Teaching (Mac Mini)", "AI Research Mode")

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden for behavioral disclosure. While 'Activate' implies a state change, it doesn't specify whether this requires permissions, has side effects (e.g., rearranging windows), or what happens on success/failure. The description lacks critical behavioral context for a mutation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that directly states the tool's function without unnecessary words. It's appropriately sized and front-loaded, with every word contributing to understanding the purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations, no output schema, and a mutation tool with behavioral implications, the description is incomplete. It doesn't address what 'activate' entails operationally, potential errors, or results, leaving significant gaps for an agent to use this tool effectively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with the single parameter 'layoutName' fully documented in the schema. The description adds no additional parameter semantics beyond implying activation by name, which the schema already covers. This meets the baseline for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Activate') and target resource ('Moom layout by name'), making the purpose immediately understandable. However, it doesn't differentiate this tool from its siblings like 'list_layouts' or 'save_current_layout' beyond the activation function, which prevents a perfect score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. With siblings like 'list_layouts' (which might be needed first to know layout names) and 'trigger_moom_action' (which might offer similar functionality), there's no indication of prerequisites, exclusions, or comparative context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_custom_grid_layoutC

Create a custom grid layout (e.g., 3x2, 4x3) for high-res displays

ParametersJSON Schema
NameRequiredDescriptionDefault
layoutNameYesName for the grid layout
columnsYesNumber of columns in the grid
rowsYesNumber of rows in the grid

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states the tool creates a layout but doesn't cover critical aspects like whether this requires specific permissions, if it overwrites existing layouts, what happens on success/failure, or any rate limits. For a creation tool with zero annotation coverage, this is a significant gap in transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that front-loads the core purpose ('Create a custom grid layout') and includes helpful examples and context without any wasted words. It's appropriately sized for the tool's complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool creates a layout (a mutation operation) with no annotations and no output schema, the description is incomplete. It lacks information on behavioral traits (e.g., permissions, side effects), return values, or error handling, which are crucial for an agent to use this tool effectively in context with siblings.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the input schema already documents all three parameters (layoutName, columns, rows) with clear descriptions. The description adds minimal value beyond the schema by implying the grid dimensions (e.g., '3x2') but doesn't provide additional syntax, constraints, or usage details for the parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Create') and resource ('custom grid layout'), with specific examples like '3x2, 4x3' and context about 'high-res displays'. However, it doesn't explicitly distinguish this tool from sibling tools like 'create_quad_layout' or 'save_current_layout', which might also involve layout creation or management.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention sibling tools like 'create_quad_layout' (which might create a specific type of layout) or 'save_current_layout' (which might save an existing layout), leaving the agent without clear usage context or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_quad_layoutB

Create a quad (2x2) window layout on a specific display

ParametersJSON Schema
NameRequiredDescriptionDefault
layoutNameYesName for the quad layout
displayNoWhich display to use
appsYesArray of 4 app names for TL, TR, BL, BR positions

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full burden but only states the basic action without disclosing behavioral traits like whether it overwrites existing layouts, requires specific permissions, or has side effects. It lacks details on error handling or what happens if apps are not open.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that front-loads the core purpose without unnecessary words, making it easy to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a creation tool with no annotations and no output schema, the description is incomplete. It misses key context such as the expected behavior on success/failure, whether the layout becomes active immediately, or how it interacts with existing layouts, leaving gaps for an AI agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema fully documents parameters. The description adds no additional meaning beyond implying the layout is 2x2, which is already clear from the tool name and schema. Baseline 3 is appropriate as the schema handles parameter documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Create'), the resource ('quad (2x2) window layout'), and the target ('on a specific display'), distinguishing it from siblings like 'create_custom_grid_layout' by specifying the exact layout type (2x2 quad).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives like 'create_custom_grid_layout' or 'activate_layout', nor does it mention prerequisites such as needing the display to be available or apps to be installed.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_monitorsB

Get monitor configuration data for layout adaptation

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It states the tool retrieves configuration data, implying a read-only operation, but doesn't disclose behavioral traits such as whether it requires permissions, returns real-time or cached data, has rate limits, or what format the data is in. This is a significant gap for a tool with zero annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with no wasted words. It is front-loaded with the core purpose and includes necessary context, making it appropriately sized and easy to parse.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (simple read operation with no parameters) and lack of annotations and output schema, the description is minimally adequate. It states what the tool does but lacks details on behavior, output format, or integration with sibling tools, leaving gaps that could hinder effective use by an AI agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has 0 parameters, and schema description coverage is 100%, so there are no parameters to document. The description adds context by specifying the data is for 'layout adaptation', which provides semantic value beyond the empty schema. Baseline for 0 parameters is 4, as the description compensates adequately.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with a specific verb ('Get') and resource ('monitor configuration data'), and specifies the context ('for layout adaptation'). It doesn't explicitly differentiate from sibling tools like 'list_layouts' or 'create_quad_layout', but the focus on monitor configuration provides some implicit distinction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites, timing, or relationships to sibling tools like 'list_layouts' or 'create_custom_grid_layout', leaving the agent to infer usage context from the purpose alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

launch_applicationC

Launch a specified application for workflow setup

ParametersJSON Schema
NameRequiredDescriptionDefault
appNameYesName of the application to launch

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden for behavioral disclosure. It states the tool 'launches' an application but doesn't describe what happens after launch (e.g., whether it brings the app to foreground, waits for completion, handles errors, or requires specific permissions). For a mutation tool with zero annotation coverage, this leaves significant behavioral gaps.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that directly states the tool's purpose without unnecessary words. It is appropriately sized and front-loaded with the core action, earning its place as a concise definition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has no annotations, no output schema, and a simple input schema, the description is incomplete. It doesn't explain what constitutes a valid 'appName', what happens on success/failure, or how this integrates with the sibling tools for workflow management. For a tool that performs an action like launching applications, more context is needed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 100% description coverage, with the single parameter 'appName' documented as 'Name of the application to launch'. The description adds no additional parameter semantics beyond what the schema provides, so it meets the baseline of 3 for high schema coverage without adding value.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('launch') and target ('specified application') with a purpose ('for workflow setup'). It distinguishes from siblings like 'activate_layout' or 'set_window_position' which manipulate layouts/windows rather than launching applications. However, it doesn't specify what types of applications or platforms are supported.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides minimal context ('for workflow setup') but gives no explicit guidance on when to use this tool versus alternatives. It doesn't mention prerequisites, when-not-to-use scenarios, or how it relates to sibling tools like 'trigger_moom_action' or 'show_moom_menu' which might offer similar functionality.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_layoutsB

List all saved Moom layouts

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It states what the tool does but doesn't describe how it behavesβ€”such as whether it returns a simple list or structured data, if there are any rate limits, or if it requires specific permissions. This leaves significant gaps for an agent to understand the operation fully.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that directly states the tool's purpose without any fluff. It's front-loaded with the core action and resource, making it easy to parse. Every word earns its place, and there's no wasted verbiage.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (0 parameters, no annotations, no output schema), the description is adequate as a basic overview. However, it lacks details on return values or behavioral traits, which would help an agent use it effectively. Without an output schema, the description should ideally hint at what 'list' entails, but it doesn't, leaving some context missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0 parameters with 100% coverage, so no parameter documentation is needed. The description doesn't add parameter details, which is appropriate here. A baseline of 4 is applied since the schema fully covers the absence of parameters, and the description doesn't introduce confusion.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('List') and resource ('saved Moom layouts'), making the purpose unambiguous. It distinguishes from siblings like 'activate_layout' or 'save_current_layout' by focusing on retrieval rather than modification. However, it doesn't specify if this includes all layout types or just certain categories, which prevents a perfect score.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. For example, it doesn't clarify if this should be used before 'activate_layout' to see available options, or if it's the primary way to discover layouts versus checking 'show_moom_menu'. The description lacks any context about prerequisites or typical workflows.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

save_current_layoutB

Save the current window arrangement as a new Moom layout

ParametersJSON Schema
NameRequiredDescriptionDefault
layoutNameYesName for the new layout

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool saves a layout but doesn't describe what happens after saving (e.g., whether it's stored persistently, if it overwrites existing layouts, or what permissions are required). For a mutation tool with zero annotation coverage, this is a significant gap in behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured sentence that efficiently conveys the core purpose without any wasted words. It's front-loaded with the main action and resource, making it easy for an agent to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity (a mutation with one parameter) and no annotations or output schema, the description is minimally adequate. It states what the tool does but lacks details on behavioral traits, usage context, or return values, leaving gaps that could hinder an agent's ability to use it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents the single parameter 'layoutName' with its description. The description doesn't add any meaning beyond what the schema provides (e.g., no format constraints or examples). Baseline 3 is appropriate when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('Save the current window arrangement') and the resource ('as a new Moom layout'), distinguishing it from siblings like 'activate_layout' or 'list_layouts'. It uses precise language that leaves no ambiguity about what the tool does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like 'create_custom_grid_layout' or 'create_quad_layout'. It doesn't mention prerequisites (e.g., needing windows to be arranged first) or exclusions, leaving the agent to infer usage context from the tool name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_window_positionC

Move a window to a specific position for precise control

ParametersJSON Schema
NameRequiredDescriptionDefault
appNameYesName of the application
xYesX coordinate
yYesY coordinate

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the tool moves a window, implying a mutation operation, but doesn't disclose critical traits: whether it requires specific permissions, if changes are reversible, potential side effects (e.g., window focus changes), or error conditions (e.g., invalid coordinates). The phrase 'for precise control' hints at manual adjustment but lacks operational details.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that front-loads the core action ('Move a window') and purpose ('for precise control'). There is no wasted language, repetition, or unnecessary elaboration. It's appropriately sized for a tool with three parameters and clear schema coverage, earning its place without verbosity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (a mutation operation with positional parameters), lack of annotations, and no output schema, the description is incomplete. It doesn't address behavioral aspects like success/failure responses, coordinate boundaries, or interaction with sibling tools (e.g., how it differs from layout-based tools). For a window management tool with potential side effects, more context on usage and outcomes is needed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with clear parameter descriptions in the schema (e.g., 'X coordinate'). The description adds minimal value beyond the schema, mentioning 'specific position' which aligns with the x and y parameters but doesn't explain coordinate systems, units, or how 'appName' identifies the target window. Baseline 3 is appropriate as the schema does the heavy lifting, but the description doesn't compensate with additional insights.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Move a window') and the resource ('a window'), specifying the purpose as positioning for precise control. It distinguishes from sibling tools like 'set_window_size' (which handles dimensions) and 'activate_layout' (which applies predefined layouts), but doesn't explicitly name these alternatives. The verb+resource combination is specific, though it could be more precise about what 'position' entails.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., needing an active window), exclusions (e.g., not working with minimized windows), or comparisons to siblings like 'create_custom_grid_layout' for structured positioning or 'trigger_moom_action' for automated window management. Usage is implied only by the tool's name and description, lacking explicit context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

set_window_sizeC

Resize a window to specific dimensions

ParametersJSON Schema
NameRequiredDescriptionDefault
appNameYesName of the application
widthYesWindow width
heightYesWindow height

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries full burden. It states the action ('Resize') but doesn't disclose behavioral traits such as whether it requires specific permissions, if it works on minimized windows, what happens with invalid dimensions, or error conditions. For a mutation tool with zero annotation coverage, this is a significant gap in transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with zero waste. It's front-loaded with the core action and resource, making it easy to parse. Every word earns its place without redundancy or unnecessary elaboration.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given this is a mutation tool with no annotations, no output schema, and 3 parameters, the description is incomplete. It lacks information on behavioral context (e.g., side effects, error handling), usage guidelines, and what to expect upon success. For a tool that modifies window states, more completeness is needed to guide effective use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents all three parameters (appName, width, height) with clear descriptions. The description adds no additional meaning beyond what the schema provides, such as units for dimensions or examples of appName values. Baseline 3 is appropriate when the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Resize') and target resource ('a window') with specific dimensions. It distinguishes from sibling tools like 'set_window_position' (which moves rather than resizes) and 'activate_layout' (which applies predefined layouts). However, it doesn't explicitly mention how it differs from layout-related siblings like 'create_custom_grid_layout'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites (e.g., whether the application must be running), when not to use it (e.g., for system windows), or direct alternatives among siblings like 'create_custom_grid_layout' for predefined sizes. Usage is implied but not explicitly stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

show_moom_menuC

Show the Moom popup menu

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden of behavioral disclosure. It states 'Show the Moom popup menu,' which implies a read-only or display action, but doesn't clarify if this is a UI interaction, if it blocks other operations, or what happens on failure. For a tool with zero annotation coverage, this is insufficient to inform safe usage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence with no wasted words. It's front-loaded with the core action and target, making it easy to parse quickly. Every word earns its place by conveying the essential purpose without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the lack of annotations and output schema, the description is incomplete for effective use. It doesn't explain what the Moom popup menu is, what it displays, or what the expected outcome is (e.g., does it return data or just trigger a UI event?). For a tool in a set with potential UI interactions, more context is needed to understand its role and behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has 0 parameters, and the schema description coverage is 100% (as there are no parameters to describe). The description doesn't need to add parameter details, so it meets the baseline expectation without compensation needed. No points are deducted since there's nothing to document beyond the empty schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose3/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the action ('Show') and target ('Moom popup menu'), which provides a basic understanding of what the tool does. However, it doesn't specify what the Moom popup menu contains or how it differs from sibling tools like 'trigger_moom_action' or 'activate_layout', leaving the purpose somewhat vague without sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description offers no guidance on when to use this tool versus alternatives. It doesn't mention any context, prerequisites, or exclusions, such as whether it requires Moom to be running or if it's interactive versus automated. With sibling tools like 'trigger_moom_action' that might overlap, this lack of guidance is a clear gap.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

trigger_moom_actionC

Trigger common Moom actions via keyboard shortcuts

ParametersJSON Schema
NameRequiredDescriptionDefault
actionYesMoom action to trigger

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions 'via keyboard shortcuts', implying an interactive or system-level effect, but doesn't specify if this requires user permissions, has side effects like window resizing, or what happens on failure (e.g., if Moom isn't active). More details on behavior would improve transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, efficient sentence that directly states the tool's purpose without unnecessary words. It's front-loaded and wastes no space, making it easy for an agent to parse quickly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no annotations and no output schema, the description is incomplete for a tool that triggers actions. It doesn't explain return values (e.g., success/failure status), error conditions, or dependencies like Moom being installed. For a tool with potential system interactions, more context is needed to guide effective use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage, with the 'action' parameter fully documented via enum values. The description adds no additional parameter semantics beyond what the schema provides, such as explaining what each action does (e.g., 'grow' expands a window). Baseline score of 3 is appropriate as the schema handles the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('trigger') and resource ('common Moom actions'), specifying they are executed 'via keyboard shortcuts'. However, it doesn't explicitly differentiate this tool from sibling tools like 'activate_layout' or 'set_window_position', which might also involve Moom actions but with different mechanisms or purposes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention prerequisites, such as needing Moom running, or compare it to siblings like 'show_moom_menu' for accessing actions differently. This leaves the agent without context for tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 11 tool updates
    • First observedactivate_layout
    • First observedcreate_custom_grid_layout
    • First observedcreate_quad_layout
    • First observedget_monitors
    • First observedlaunch_application
    • First observedlist_layouts
    • First observedsave_current_layout
    • First observedset_window_position
    • First observedset_window_size
    • First observedshow_moom_menu
    • First observedtrigger_moom_action

TDQS

B3.4/5.0
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

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    A Model Context Protocol server for Claude Desktop that provides structured memory management across chat sessions, allowing Claude to maintain context and build a knowledge base within project directories.
    12
    6
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    A custom Model Context Protocol server that gives Claude Desktop and other LLMs access to file system operations and command execution capabilities through standardized tool interfaces.
    23
    Apache 2.0
  • A
    license
    Not graded
    quality
    D
    maintenance
    A Model Context Protocol server that enables Claude Desktop to perform file operations like reading, writing, listing directories, and managing files through natural language commands.
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/itrimble/moom-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server