Moom MCP Server
Enables window management and layout control on macOS through Moom, allowing users to switch between saved layouts, create new window arrangements, and control window positioning and sizing.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Moom MCP Serveractivate my coding layout"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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
Clone this repository:
git clone https://github.com/itrimble/moom-mcp.git cd moom-mcpInstall dependencies:
npm installGrant accessibility permissions:
Open System Preferences β Security & Privacy β Privacy β Accessibility
Add and enable Terminal (or your terminal app)
Add and enable Claude Desktop
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"] } } }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 |
| Switch to a saved Moom layout |
|
| Save current window arrangement |
|
| Execute window actions |
|
| Display Moom popup menu |
|
Supported Window Actions
grow- Increase window sizeshrink- Decrease window sizemove-left- Move window leftmove-right- Move window rightmove-up- Move window upmove-down- Move window downcenter- Center window on screenfill-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/displayplacerProject 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 fileDevelopment
Testing
Run the test suite:
npm test # Basic tests
npm run test-ui # UI automation tests
npm run validate # Validate configurationDebugging
Check if Moom is running:
pgrep -x MoomVerify accessibility permissions are granted
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
Related Projects
Available Tools
11 toolsactivate_layoutC
Activate a specific Moom layout by name
| Name | Required | Description | Default |
|---|---|---|---|
| layoutName | Yes | Name of the layout to activate (e.g., "Teaching (Mac Mini)", "AI Research Mode") |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| layoutName | Yes | Name for the grid layout | |
| columns | Yes | Number of columns in the grid | |
| rows | Yes | Number of rows in the grid |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| layoutName | Yes | Name for the quad layout | |
| display | No | Which display to use | |
| apps | Yes | Array of 4 app names for TL, TR, BL, BR positions |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| appName | Yes | Name of the application to launch |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| layoutName | Yes | Name for the new layout |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| appName | Yes | Name of the application | |
| x | Yes | X coordinate | |
| y | Yes | Y coordinate |
TDQS
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.
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.
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.
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.
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.
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
| Name | Required | Description | Default |
|---|---|---|---|
| appName | Yes | Name of the application | |
| width | Yes | Window width | |
| height | Yes | Window height |
TDQS
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.
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.
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.
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.
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.
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.
trigger_moom_actionC
Trigger common Moom actions via keyboard shortcuts
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | Moom action to trigger |
TDQS
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.
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.
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.
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.
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.
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.
11 tool updates
- First observed
activate_layout - First observed
create_custom_grid_layout - First observed
create_quad_layout - First observed
get_monitors - First observed
launch_application - First observed
list_layouts - First observed
save_current_layout - First observed
set_window_position - First observed
set_window_size - First observed
show_moom_menu - First observed
trigger_moom_action
TDQS
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.
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.
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.
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
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
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yoβ¦
A Model Context Protocol server for Wix AI tools
- QuallaaOAuthcom.quallaa
Talk to your public-facing AI from any MCP client β Claude, ChatGPT, Cursor, Cline, Windsurf.
Shared memory and actions for Claude, Kiro, OpenAI, Cursor, and other MCP-compatible AI clients.
Related MCP Servers
- AlicenseNot gradedqualityFmaintenanceA Python-based server that implements the Model Context Protocol to interface with Claude Desktop as an MCP client, supporting interaction through efficient memory management.1MIT
- AlicenseNot gradedqualityDmaintenanceA 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.126MIT
- AlicenseNot gradedqualityDmaintenanceA 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.23Apache 2.0
- AlicenseNot gradedqualityDmaintenanceA 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
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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