mac-mcp-server
Provides comprehensive tools for macOS automation, including system information retrieval, window and application management, input simulation, and UI element interaction via AppleScript and JXA.
Enables automation and control of the Safari web browser through macOS-level automation and accessibility frameworks.
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., "@mac-mcp-serverList all running apps and tell me my current battery level"
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.
mac-mcp-server
A macOS AppleScript MCP (Model Context Protocol) server that enables Claude Code and other AI assistants to automate macOS through AppleScript and JXA (JavaScript for Automation).
Overview
This MCP server provides 44 tools for comprehensive macOS automation, allowing AI assistants to:
Retrieve system information (hardware, battery, displays)
Manage applications (launch, quit, activate, list running apps)
Control windows (move, resize, focus, minimize)
Simulate keyboard and mouse input
Interact with UI elements via Accessibility APIs
Capture screenshots (auto-optimized for API compatibility)
Access clipboard and notifications
Control audio settings
Navigate menus and status bar items
The server communicates over stdio for seamless Claude Code integration and uses AppleScript/JXA for system automation.
Related MCP server: Automation MCP
Quick Start
Prerequisites
macOS 10.15 (Catalina) or later
Node.js 20.11.0 or later
Install from npm
npm install -g mac-mcp-serverConfigure Claude Code
Add the following to your Claude Code MCP configuration (~/.claude.json or Claude Desktop settings):
{
"mcpServers": {
"mac-mcp-server": {
"command": "npx",
"args": ["-y", "mac-mcp-server"]
}
}
}Restart Claude Code to load the MCP server.
Grant macOS Permissions
On first use, macOS will prompt you to grant required permissions. See the Permissions Guide below for details.
Tool Reference
System Information
Tool | Description |
| Retrieves macOS version, hardware model, processor, and memory |
| Gets battery percentage and charging status (MacBooks) |
| Lists connected displays with resolution information |
Audio Control
Tool | Description |
| Gets current system volume (0-100) |
| Sets system volume to specified percentage |
| Checks if system audio is muted |
| Mutes or unmutes system audio |
Clipboard and Notifications
Tool | Description |
| Reads current clipboard content (text, image, or files) |
| Sets clipboard to specified text |
| Displays a macOS notification with optional subtitle and sound |
Application Management
Tool | Description |
| Lists all running GUI applications with bundle IDs and PIDs |
| Launches an application by name |
| Gracefully quits an application |
| Brings an application to the foreground |
Finder Integration
Tool | Description |
| Opens Finder and selects the specified file or folder |
| Gets paths of currently selected files in Finder |
| Gets the path of the frontmost Finder window |
Window Management
Tool | Description |
| Lists all visible windows with position and size |
| Brings a specific window to the front |
| Moves a window to specified coordinates |
| Resizes a window to specified dimensions |
| Minimizes a window to the Dock |
Mouse Control
Tool | Description |
| Performs a mouse click (left, right, or middle button) |
| Performs a double-click |
| Moves the cursor without clicking |
| Performs a drag operation from start to end coordinates |
Keyboard Input
Tool | Description |
| Types text at the current cursor position |
| Presses a key by name (Enter, Tab, Escape, F1-F12, etc.) |
| Presses a focused-app/menu key combination (not guaranteed for OS-global hotkeys) |
Scroll and Navigation
Tool | Description |
| Scrolls in a specified direction (up, down, left, right) |
| Scrolls until a UI element becomes visible |
Screenshots
Tool | Description |
| Captures screen, display, window, or region as PNG/JPEG |
Screenshot Features:
Auto-resize: Screenshots are resized to max 1600px (configurable) for API compatibility
Auto-compress: File size limited to 1.8MB using JPEG compression when needed
Full resolution: Use
rawFile: truefor file output at full resolutionDisable processing: Set
maxDimension: 0andmaxFileSize: 0to disable all processing
UI Element Interaction
Tool | Description |
| Retrieves the UI element tree for an application |
| Clicks a UI element by path |
| Gets the value of a UI element |
| Sets the value of an editable UI element |
| Sets keyboard focus to a UI element |
Menu Bar Operations
Tool | Description |
| Gets the menu hierarchy for an application |
| Clicks a menu item by path (e.g., "File > Save") |
| Gets enabled/checked state of a menu item |
| Lists visible status bar items |
| Clicks a status bar item to open its menu |
| Clicks a menu item within a status bar menu |
| Gets complete menu bar hierarchy for a process |
macOS Permissions
This server requires specific macOS permissions to function. The first time you use certain tools, macOS will prompt you to grant access.
Required Permissions
1. Accessibility
Required for: Keyboard input, mouse control, UI element interaction, window management
Grant access:
Open System Settings > Privacy & Security > Accessibility
Click the + button and add your terminal app (Terminal, iTerm2, or Claude Code)
Toggle the switch to enable access
Restart your terminal after granting permission
Quick access:
open "x-apple.systempreferences:com.apple.preference.security?Privacy_Accessibility"2. Automation
Required for: Controlling other applications (Finder, Safari, etc.)
Grant access:
Open System Settings > Privacy & Security > Automation
Find your terminal app in the list
Enable checkboxes for target applications you want to control
If prompted during first use, click OK to allow
Quick access:
open "x-apple.systempreferences:com.apple.preference.security?Privacy_Automation"3. Screen Recording
Required for: Screenshots
Grant access:
Open System Settings > Privacy & Security > Screen Recording
Click the + button and add your terminal app
Toggle the switch to enable access
Restart your terminal after granting permission
Quick access:
open "x-apple.systempreferences:com.apple.preference.security?Privacy_ScreenCapture"Troubleshooting Permissions
Issue | Solution |
Permission added but not working | Restart your terminal app completely (Cmd+Q, then reopen) |
App not appearing in permission list | Run the operation once to trigger the permission dialog |
Permission still denied after granting | Remove the app from the list, restart, then re-add it |
All permission issues persist | Restart macOS |
"assistive access" error | Grant Accessibility permission specifically |
"-1743" error code | Grant Automation permission for the target app |
Screenshot returns black image | Grant Screen Recording permission and restart |
Permission Checklist
Before using mac-mcp-server, verify these permissions are granted:
Accessibility - Terminal/Claude Code added and enabled
Automation - Target apps enabled under your terminal
Screen Recording - Terminal/Claude Code added and enabled
App restarted after granting permissions
Usage Examples
System Information
// Get system info
await get_system_info({})
// Returns: { macOSVersion: "15.0", hardwareModel: "MacBook Pro", ... }
// Get battery status
await get_battery_status({})
// Returns: { percentage: 85, isCharging: true, isDesktop: false }Application Management
// List running applications
await list_running_apps({})
// Returns: [{ name: "Safari", bundleId: "com.apple.Safari", processId: 1234 }, ...]
// Launch an application
await launch_app({ name: 'Safari' })
// Quit an application
await quit_app({ name: 'Safari' })Window Management
// List all windows
await list_windows({})
// Focus a specific window
await focus_window({ appName: 'Finder', windowIndex: 1 })
// Move a window
await move_window({ appName: 'Finder', x: 100, y: 100 })
// Resize a window
await resize_window({ appName: 'Finder', width: 800, height: 600 })Keyboard and Mouse
// Type text
await type_text({ text: 'Hello, World!' })
// Press a key
await press_key({ key: 'enter' })
// Key combination (Cmd+C)
await key_combination({ modifiers: ['command'], key: 'c' })
// Note: key_combination uses AppleScript System Events. It is intended for
// focused-window shortcuts and app menu key equivalents, not OS-global hotkeys
// such as Electron globalShortcut/RegisterEventHotKey handlers. Prefer
// click_menu_item, click_status_bar_item, or an in-window shortcut for those.
// Click at coordinates
await click({ x: 500, y: 300 })
// Right-click
await click({ x: 500, y: 300, button: 'right' })
// Cmd+click
await click({ x: 500, y: 300, modifiers: ['command'] })Screenshots
// Capture full screen (auto-resized and compressed for API)
await take_screenshot({})
// Capture to file (also auto-processed by default)
await take_screenshot({ filePath: '/tmp/screenshot.png' })
// Capture at full resolution (no processing)
await take_screenshot({ filePath: '/tmp/full.png', rawFile: true })
// Capture specific region
await take_screenshot({
region: { x: 100, y: 100, width: 800, height: 600 },
})
// Custom compression settings
await take_screenshot({
maxDimension: 1920, // Max 1920px
maxFileSize: 1_000_000, // Max 1MB
quality: 70, // JPEG quality 70
})
// Disable all processing for base64 output
await take_screenshot({ maxDimension: 0, maxFileSize: 0 })UI Element Interaction
// Get UI element tree
await get_ui_elements({ appName: 'Safari', maxDepth: 3 })
// Click a button by path
await click_ui_element({
appName: 'Safari',
elementPath: 'window1/button1',
})
// Set text field value
await set_ui_element_value({
appName: 'TextEdit',
elementPath: 'window1/textfield1',
value: 'New text',
})Menu Operations
// List application menus
await list_menu_items({ appName: 'Finder' })
// Click a menu item
await click_menu_item({
appName: 'Finder',
menuPath: 'File > New Finder Window',
})
// Get menu item state
await get_menu_item_state({
appName: 'Finder',
menuPath: 'View > Show Path Bar',
})Installation from Source
For development or customization:
git clone https://github.com/laststance/mac-mcp-server.git
cd mac-mcp-server
pnpm install
pnpm buildThen configure Claude Code to use the local build:
{
"mcpServers": {
"mac-mcp-server": {
"command": "node",
"args": ["/path/to/mac-mcp-server/dist/index.js"]
}
}
}Development
Commands
Command | Description |
| Build for production |
| Development mode (watch) |
| Run tests |
| TypeScript type checking |
| Lint code |
| Lint and auto-fix |
| Format code with Prettier |
Project Structure
mac-mcp-server/
├── src/
│ ├── index.ts # Entry point, MCP server setup
│ ├── lib/
│ │ ├── server.ts # MCP server configuration
│ │ ├── executor.ts # AppleScript execution
│ │ ├── permission.ts # Permission checking and guidance
│ │ └── sanitizer.ts # Input sanitization
│ └── tools/
│ ├── system.ts # System information tools
│ ├── clipboard.ts # Clipboard management
│ ├── notification.ts # Notification display
│ ├── audio.ts # Audio control
│ ├── application.ts # Application lifecycle
│ ├── finder.ts # Finder integration
│ ├── window.ts # Window management
│ ├── mouse.ts # Mouse control
│ ├── keyboard.ts # Keyboard input
│ ├── scroll.ts # Scroll operations
│ ├── screenshot.ts # Screenshot capture
│ ├── ui-element.ts # UI element interaction
│ └── menu.ts # Menu bar operations
├── dist/ # Compiled output
├── package.json
└── tsconfig.jsonSecurity
This MCP server is designed with security in mind:
AppleScript-only execution: All automation is performed through AppleScript and JXA. No arbitrary shell commands are executed.
Input sanitization: All user inputs are sanitized before being included in AppleScript to prevent injection attacks.
No data persistence: The server does not store any user data or credentials.
Permission-gated access: All sensitive operations require explicit macOS permission grants.
Scoped automation: Each tool has a specific, limited purpose rather than providing general system access.
Requirements
Requirement | Version |
macOS | 10.15 (Catalina) or later |
Node.js | 20.11.0 or later |
pnpm | 10.28.0 (for development) |
License
MIT
Author
Contributing
Contributions are welcome. Please open an issue first to discuss what you would like to change.
Fork the repository
Create your feature branch (
git checkout -b feature/amazing-feature)Commit your changes (
git commit -m 'Add some amazing feature')Push to the branch (
git push origin feature/amazing-feature)Open a Pull Request
Available Tools
44 toolsactivate_appC
Brings an application to the foreground
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Application name to bring to foreground |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, description must disclose behavioral traits. It does not mention what happens if the app is not running, whether it activates all windows, or any permission requirements. The description is too brief 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?
Single sentence, no wasted words. Efficient and to the point.
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 simple tool with one param and no output schema, the description is too minimal. It lacks details on success conditions, error states, and behavior when app is not running, making it incomplete.
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 coverage is 100% and schema provides a clear description. The tool description adds no extra meaning beyond the schema, so baseline 3 is appropriate.
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?
Description clearly states the action: brings an application to the foreground. It is specific to activating an app, which distinguishes it from siblings like 'launch_app' (launching) and 'focus_window' (focusing a window). However, it does not explicitly differentiate from similar tools.
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 on when to use this tool versus alternatives (e.g., 'focus_window' or 'click_ui_element'). Lacks context about prerequisites (e.g., app must be running?) or edge cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
clickB
Performs a mouse click at specified coordinates. Supports left, right, middle buttons and modifier keys
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | X coordinate for the click | |
| y | Yes | Y coordinate for the click | |
| button | No | Mouse button to click (left, right, or middle) | left |
| modifiers | No | Modifier keys to hold during click |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It only describes the action without disclosing side effects, permissions, or limitations. A click can trigger various behaviors, but none are mentioned.
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?
A single, front-loaded sentence with no wasted words. Efficiently conveys the tool's core function and supported options.
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 simple click tool with complete schema and no output schema, the description is adequate. It could note that the tool returns nothing or is fire-and-forget, but the basic info is present.
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 parameters. The description adds nothing beyond echoing the schema, meeting the baseline of 3.
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 performs a mouse click at coordinates and supports various buttons and modifier keys. It is specific and distinguishes from sibling tools like double_click, drag, and scroll.
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 on when to use this tool versus alternatives. With many click-related siblings (click_menu_item, click_ui_element, etc.), the description does not help the agent choose correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
click_status_bar_itemB
Clicks a status bar item to open its menu
| Name | Required | Description | Default |
|---|---|---|---|
| identifier | Yes | Status item description or process name |
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 only states the action without disclosing prerequisites (e.g., item must be visible), side effects (menu remains open), or error handling.
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?
One sentence with zero waste. Highly efficient for 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?
For a simple click action, the description is minimally sufficient. However, it lacks context about return values (none), potential failures, or integration with other tools like list_status_bar_items.
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 already describes the 'identifier' parameter as 'Status item description or process name'. The description adds no further meaning, so baseline 3 is appropriate.
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 a verb and resource: 'Clicks a status bar item'. It distinguishes from siblings like 'click_menu_item' and 'click_ui_element', though 'click_status_bar_menu_item' is a related tool that could cause confusion.
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 on when to use this tool versus alternatives like 'click_status_bar_menu_item' or 'click'. No prerequisites or exclusions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
click_ui_elementB
Clicks a UI element by path (e.g., "window1/button1")
| Name | Required | Description | Default |
|---|---|---|---|
| appName | Yes | Application name containing the element | |
| elementPath | Yes | Path to the element to click |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, and the description only states the basic action. It does not disclose behavior such as whether the element must be visible, what happens if the path is invalid, or if there are side effects. Minimal 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 concise (single sentence with an example) and front-loaded. No unnecessary words.
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 simple click tool, the description covers the essentials. However, it omits return value (no output schema) and error handling. Nearly complete given low complexity.
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 description adds no extra parameter meaning. The example in the description provides some context but does not detail parameter formats or constraints beyond the schema.
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 (clicks), the resource (UI element), and the method (by path, with an example). It distinguishes from sibling tools like 'click' and 'click_menu_item' by specifying the use of a hierarchical path.
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 on when to use this tool versus alternatives like 'click' or 'click_menu_item'. Does not mention prerequisites or context for use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
double_clickB
Performs a double-click at specified coordinates
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | X coordinate for the double-click | |
| y | Yes | Y coordinate for the double-click |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It does not disclose behavioral traits such as whether the mouse is moved first, what happens if coordinates are off-screen, or if there is any delay.
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?
One-sentence description is concise and front-loaded, but lacks structure (e.g., bullet points). For a simple tool, this is acceptable, though not exemplary.
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 simple nature of the tool and full schema coverage, the description is adequate but does not address prerequisites, return values, or potential side effects. No output schema to rely on.
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 has 100% description coverage for 'x' and 'y', providing basic coordinate semantics. The description adds no additional meaning beyond repeating 'specified coordinates'.
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 ('double-click') and the target ('specified coordinates'), distinguishing it from sibling tools like 'click' (single click) and 'move_mouse'.
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 on when to use this tool versus alternatives like 'click' or 'move_mouse'. Could mention that double-click is often used to open files or select text.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dragC
Performs a drag operation from start to end coordinates
| Name | Required | Description | Default |
|---|---|---|---|
| startX | Yes | Starting X coordinate | |
| startY | Yes | Starting Y coordinate | |
| endX | Yes | Ending X coordinate | |
| endY | Yes | Ending Y coordinate |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must fully disclose behavior, but it merely states 'performs a drag operation' without details on mouse button state, duration, coordinate system, or error conditions. This is insufficient.
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 extremely concise (one sentence), but it sacrifices informative value. It earns a mid score for being brief yet complete for basic purpose, though more detail would improve it.
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 output schema and no annotations, the description should provide richer context about the drag action, such as whether it simulates mouse down/move/up, how long it takes, or what happens on completion. It is incomplete.
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 coverage is 100%, so baseline is 3. The description adds no additional meaning beyond the property names and brief schema descriptions; no units, coordinate origin, or relationship between parameters is clarified.
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 (performs) and resource (drag operation using start/end coordinates). It distinguishes from sibling tools like click or move_mouse by implying a continuous press-and-drag action, though not explicitly.
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 drag versus alternatives like click+move. The description lacks any conditional or contextual hints for the AI agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
focus_ui_elementB
Sets keyboard focus to a UI element
| Name | Required | Description | Default |
|---|---|---|---|
| appName | Yes | Application name containing the element | |
| elementPath | Yes | Path to the element to focus |
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 does not disclose behavior beyond 'sets keyboard focus' – no mention of prerequisites, side effects (e.g., window activation), error conditions, or what happens if the element is not focusable.
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 could be slightly improved by adding context, but it is appropriately sized for a simple action.
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 and lack of output schema or annotations, the description is minimally adequate. It covers the basic action but omits guidance on path format, element visibility requirements, and typical use cases.
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 coverage is 100%, and the description adds no extra meaning beyond what the input schema already provides for appName and elementPath. Baseline score of 3 applies.
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 'Sets keyboard focus to a UI element' uses a clear verb-resource pair distinguishing it from siblings like click_ui_element or get_ui_element_value. It immediately conveys the core action.
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 explicit guidance is provided for when to use this tool versus alternatives. The intended use (to set keyboard focus before typing) is implied but not stated, and no exclusions or sibling references are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
focus_windowB
Brings a specific window to the front by app name and optional window index
| Name | Required | Description | Default |
|---|---|---|---|
| appName | Yes | Application name | |
| windowIndex | No | 1-based window index | |
| windowTitle | No | Window title to focus |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must carry behavioral details. It only says 'brings to front' without disclosing side effects, error handling, or behavior when window is minimized or missing.
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?
Single sentence, perfectly concise, front-loaded with the core action. No unnecessary words.
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 simple tool with no output schema, description is adequate but lacks behavioral context like prerequisites and failure modes. Additional context would improve usability.
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 coverage is 100% with clear descriptions. The description adds 'optional window index' but no additional meaning beyond schema. Baseline is appropriate.
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 brings a window to front using app name and optional index. It differentiates from siblings like activate_app and focus_ui_element.
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 on when to use vs alternatives, no exclusions, and no mention of prerequisites like app running. With many sibling window/UI tools, this is a gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_battery_statusA
Gets battery percentage and charging status (MacBooks only, returns isDesktop: true for desktop Macs)
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Reveals return of isDesktop flag for desktop Macs, but contains slight contradiction: 'MacBooks only' vs 'returns isDesktop: true for desktop Macs'. Not fully clear if tool also works on non-MacBook Macs.
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?
Single sentence, front-loaded with key info. No filler words. Efficient.
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?
No output schema, so description must explain return values. Mentions battery percentage, charging status, and isDesktop. Lacks details on exact keys or types, but sufficient for a simple zero-parameter tool.
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?
No parameters defined in schema (0 params, 100% coverage). Description adds no param details, but none are needed. Baseline 4 applies.
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?
Clearly states verb 'Gets' and resource 'battery percentage and charging status'. Explicitly scoped to MacBooks, distinguishing it from all sibling tools which deal with UI interactions.
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?
Specifies MacBooks only, which guides usage context. No explicit alternatives given but no alternative battery tools exist. Lacks guidance on when not to use, but clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_clipboardA
Reads current clipboard content (text, image paths, or file paths)
| 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 must fully disclose behavior. It states the tool reads clipboard content but does not mention potential side effects (e.g., whether it modifies the clipboard), permissions needed, or error states. This is insufficient for a read operation without annotation support.
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?
A single sentence that conveys the essential purpose and details. No extraneous text, front-loaded with the verb and resource. Perfectly concise.
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 parameters and no output schema, the description covers the basic return types. However, it does not explain the format of the returned data (e.g., a string or an object with keys), nor any conditions (e.g., what happens if clipboard is empty). Slightly incomplete for full clarity.
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?
Input schema has zero parameters, so baseline is 4. The description adds no parameter details, but since there are none, it is fully adequate.
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 'reads', the resource 'clipboard content', and specifies the types of content (text, image paths, file paths). It effectively distinguishes this tool from its sibling 'set_clipboard' by indicating read vs write.
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 explicit guidance on when to use or not, nor any mention of alternatives. The tool is straightforward, but the description lacks context like 'Use this to retrieve the current clipboard state' or exclusions. Implied usage is adequate for a simple read tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_display_infoA
Lists connected displays with name, resolution, and main display indicator
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description must convey behavioral traits. It adequately states it is a read-only operation listing displays, but does not mention any side effects, prerequisites, or performance implications. It is sufficient but minimal.
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?
A single sentence that is concise and front-loaded with the action verb 'Lists'. Every word contributes to the description; no unnecessary information.
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 zero-parameter tool with no output schema, the description provides sufficient detail about the returned fields. However, it could mention whether the display list includes all connected displays or only active ones, but overall it is complete enough.
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?
There are no parameters, and schema coverage is 100%. The description adds value by enumerating the output fields (name, resolution, main display indicator), exceeding the baseline of 3.
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 explicitly states the tool lists connected displays and specifies the returned fields: name, resolution, and main display indicator. This clearly distinguishes it from sibling tools like get_system_info.
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 on when to use this tool versus alternatives such as get_system_info or get_clipboard. The description lacks context for appropriate usage scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_finder_window_pathA
Gets the path of the frontmost Finder window
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits, but it fails to mention edge cases like what happens when no Finder window is open, error handling, or the return format. This lack of transparency hinders proper invocation.
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, concise sentence with no redundant information. It efficiently communicates the core functionality.
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 simple tool with no parameters and no output schema, the description is adequate but incomplete. It does not specify the return value type (e.g., string path) or potential error conditions, which an agent needs to handle 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?
The tool has zero parameters, so schema coverage is vacuously 100%. The description adds no parameter information, but per guidelines, 0 parameters earns a baseline of 4.
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 ('Gets') and the specific resource ('path of the frontmost Finder window'), making the tool's purpose unambiguous and distinguishable from siblings like 'get_selected_files'.
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 such as 'get_selected_files' or 'list_windows'. The description lacks any context about prerequisites or exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_mute_statusA
Checks if system audio is currently muted
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description must fully disclose behavior. It only states the tool 'checks' mute status but does not describe the return format, side effects, or any constraints, which is insufficient.
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 sentence with no extraneous information, making it efficiently concise and front-loaded.
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 and absence of parameters, the description is fairly complete but lacks specification of the output type (e.g., boolean), which is a gap for an agent to use the result 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?
There are no parameters, and schema coverage is 100%. The description adds no additional meaning beyond the schema, meeting the baseline for a zero-parameter tool.
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 'Checks if system audio is currently muted' clearly states the specific action (checks) and resource (mute status), and it distinguishes from sibling tools like set_mute and get_volume.
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 such as get_volume or set_mute, leaving the agent to infer context without explicit direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_selected_filesA
Gets paths of files currently selected in Finder
| 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 full burden but only states it 'gets paths', offering no details on behavior like error handling, permission requirements, or what happens when no files are selected.
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 key action and resource.
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 (no parameters, no output schema), the description is mostly complete. However, it could mention edge cases like no files selected or multiple selections, but lacks an output schema.
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 zero parameters and schema coverage is 100%. Per guidelines, 0 parameters earns a baseline of 4, and the description does not need to add parameter info.
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 'Gets' and the resource 'paths of files currently selected in Finder', making the purpose unambiguous. It distinguishes this tool from siblings like 'get_finder_window_path' or 'get_clipboard'.
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 implies usage when needing selected file paths in Finder, but provides no explicit guidance on when to use this vs. alternatives, nor any exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_system_infoA
Retrieves macOS system information including version, hardware model, processor, and memory
| 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 indicates a read-only operation ('Retrieves'), but does not disclose permissions, rate limits, or any other behavioral traits. It is adequate but minimal.
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 sentence front-loading the action ('Retrieves macOS system information') and listing key items. Every word contributes value; there is no waste.
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 simple read-only tool with no parameters and no output schema, the description covers the purpose and scope. It could note that the return format is not specified, but given the simplicity, it is substantially complete.
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 zero parameters, and description coverage is 100%. The description adds no parameter info, but none is needed. Baseline for zero parameters is 4, and the description meets this standard.
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 retrieves macOS system information, listing specific categories (version, hardware model, processor, memory). This distinguishes it from sibling tools like get_battery_status or get_display_info, which focus on specific aspects.
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 implies using this tool when general system info is needed, but lacks explicit guidance on when to prefer it over other getters or when not to use it. No alternatives or context exclusions are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ui_elementsA
Retrieves the UI element tree for an application. Use maxDepth to limit tree depth
| Name | Required | Description | Default |
|---|---|---|---|
| appName | Yes | Application name to get UI elements from | |
| maxDepth | No | Maximum tree traversal depth (default: 3) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must disclose behavioral traits. It states the tool retrieves a tree but lacks details on read-only nature, performance impacts, authentication needs, or error handling. This is insufficient 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 two sentences long, front-loaded with the core purpose, and every word is functional. No unnecessary information.
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?
The tool is simple with two parameters and no output schema. The description is adequate but lacks details about the content of the UI element tree, behavior for missing apps, or performance notes. Completeness is moderate.
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 coverage is 100%, so the schema already documents both parameters. The description adds minimal value by emphasizing 'maxDepth' usage, but does not significantly extend understanding beyond the schema.
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 uses a specific verb ('retrieves') and resource ('UI element tree'), clearly indicating the tool's function. It distinguishes from sibling tools like 'click' or 'focus_ui_element' which perform actions, while this retrieves structure.
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 mentions using 'maxDepth' to limit depth, providing a usage hint. However, it does not explicitly state when to use this tool versus alternatives, nor does it provide conditions for when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_ui_element_valueB
Gets the value of a UI element (text field content, checkbox state, etc.)
| Name | Required | Description | Default |
|---|---|---|---|
| appName | Yes | Application name containing the element | |
| elementPath | Yes | Path to the element |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description bears full burden. It does not disclose prerequisites (e.g., app must be running), error behavior (element not found), or whether it waits for element. Lacks key behavioral details beyond basic purpose.
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?
Single clear sentence with no unnecessary words or repetition. Front-loaded with the core action. Every word adds value.
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?
Tool has no output schema and no annotations. Description does not explain return value format, error handling, or prerequisites (e.g., element must be focused). For a simple read tool, missing crucial context for an agent to use it reliably.
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 parameters are already well-documented in the schema. The description adds no additional meaning or context about parameter formats or usage beyond what the schema provides, thus baseline 3.
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?
Description clearly states it gets the value of a UI element and gives concrete examples (text field content, checkbox state), differentiating it from siblings like set_ui_element_value and click_ui_element.
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 explicit guidance on when to use vs alternatives like get_selected_files or get_clipboard. The description only states what it does, not context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_volumeA
Gets the current system volume as a percentage (0-100)
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses that the tool returns the current volume as a percentage. It could be more specific (e.g., system output volume), but it is clear and unlikely to mislead.
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?
A single, front-loaded sentence with no unnecessary words. Every word contributes to understanding.
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 simple tool with no parameters and no output schema, the description is complete. It explains the return value sufficiently.
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?
Input schema has no parameters, so description need not add param info. The baseline of 4 is appropriate as the schema coverage is 100% and there is nothing to explain.
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 (Gets), the resource (current system volume), and the output format (percentage 0-100). It distinguishes this tool from siblings like set_volume and get_mute_status.
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 implies usage for reading volume, but does not explicitly state when to use this tool vs alternatives, nor does it provide any conditions or exclusions. For a simple getter, this is acceptable but not exemplary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
key_combinationA
Presses a focused-app or menu key combination with modifiers; OS-global hotkeys such as Electron globalShortcut are not guaranteed
| Name | Required | Description | Default |
|---|---|---|---|
| modifiers | Yes | Modifier keys to hold (command, shift, option, control) | |
| key | Yes | Key to press with modifiers in the focused app/menu shortcut path; OS-global hotkeys are not guaranteed |
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 discloses that the tool works on focused apps/menus and does not guarantee global hotkeys. This adds important behavioral context, though it could mention prerequisites like app focus.
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, front-loaded sentence with no redundancy. It conveys the essential behavior and limitation without extra words.
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?
The tool is simple with 2 parameters and no output schema. The description plus schema adequately convey usage for app/menu key combinations. Minor missing context about needing a focused app is implied but not explicit.
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 both parameters well described. The tool description does not add new parameter-level information beyond reinforcing the context of focused apps, so the schema already carries the burden.
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 presses a key combination with modifiers in a focused app or menu. It distinguishes from sibling tools like press_key (no modifiers) by explicitly including modifiers and from click_menu_item by specifying keyboard vs mouse action.
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 clarifies that OS-global hotkeys are not guaranteed, providing a clear when-not-to-use condition. However, it does not explicitly mention alternatives like press_key for single keys or click_menu_item for menu items.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
launch_appB
Launches an application by name (e.g., "Safari", "Finder")
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Application name to launch |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden but only states 'Launches an application'. It does not disclose whether it starts a new instance or brings existing to foreground, what happens if the app is already running, success/failure indications, or permission requirements.
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 concise sentence that communicates the core function immediately. No extraneous words. Well-structured 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?
For a simple tool with one parameter and no output schema, the description covers the essential purpose and parameter. However, it lacks behavioral details like whether it errors on unknown app names or how it handles already running apps, which are relevant for an 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% (the only parameter 'name' has a description). The tool description adds minimal value by providing examples of valid names, but does not elaborate on format or constraints beyond the schema.
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 ('Launches'), the resource ('application by name'), and provides concrete examples ('e.g., Safari, Finder'). It is specific and distinguishes from siblings like 'activate_app' which focuses an already running app.
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 vs alternatives like 'activate_app' for focusing an app or 'click_menu_item' for interacting within an app. There is no mention of prerequisites or conditions under which launching fails.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_running_appsA
Lists all running GUI applications with name, bundle ID, and process ID
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. Description only states what it lists, not whether it is read-only, has side effects, or performance considerations. Minimal behavioral insight beyond the name.
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?
Single sentence that is front-loaded with the action and output. No unnecessary words. Eminently concise.
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 zero parameters, no output schema, and the tool's simplicity, the description fully covers what the tool does and what it returns. No additional context 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?
No parameters exist, and schema coverage is 100%. Description does not need to add parameter info. Baseline 4 is appropriate for a zero-parameter tool.
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?
Description clearly states it lists all running GUI applications with specific fields (name, bundle ID, process ID). Verb 'list' and resource 'running GUI applications' are precise and unique among sibling tools.
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 explicit guidance on when to use this tool vs alternatives. It is implied for obtaining app information before actions like activate_app or quit_app, but no exclusions or recommendations are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_status_bar_itemsB
Lists visible status bar (menu bar extras) items
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. It only states 'lists' implying a read operation, but lacks details on permissions, side effects, or return format. Insufficient for full 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, clear sentence with no wasted words. It is appropriately concise for a simple tool.
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?
The tool has no output schema to describe return values, and the description does not specify what format the list returns (e.g., names, objects). For a tool with no annotations and no output schema, the description should compensate by detailing the output. It is incomplete.
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 zero parameters with 100% coverage, so no parameter documentation is needed. The description adds no parameter info, which is acceptable per guidelines (baseline 4 for 0 params).
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 'Lists' and the resource 'visible status bar (menu bar extras) items'. It distinguishes this tool from similar siblings like 'list_menu_items' by focusing on status bar extras.
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 such as 'get_menu_bar_structure' or 'list_menu_items'. No exclusions or when-not scenarios are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_windowsB
Lists all visible windows with app name, title, position, and size. Optional: filter by app name
| Name | Required | Description | Default |
|---|---|---|---|
| appName | No | Filter windows by application name |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description should disclose behavioral traits. It only states what the tool does but does not mention prerequisites (e.g., accessibility permissions), whether it's a snapshot or live list, or performance implications. This is insufficient 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 very concise: two sentences, first explaining the core purpose and second noting the optional filter. No redundant words, and the key information is front-loaded.
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?
The description specifies the fields returned (app name, title, position, size) but does not detail the format of position/size or whether the result is an array. Without an output schema, more structural context would be helpful. Adequate but not complete.
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 covers the only parameter fully, describing it as a filter by app name. The description repeats this without adding new meaning, so it meets the baseline for high schema coverage but does not enhance understanding.
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 lists all visible windows with specific fields (app name, title, position, size) and mentions optional filtering. It distinguishes itself from sibling tools like focus_window, move_window, etc., by being a listing tool.
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. It does not mention any context for using it, e.g., before focusing or moving windows, or any conflicts with similar tools like get_ui_elements.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
minimize_windowA
Minimizes a window to the Dock
| Name | Required | Description | Default |
|---|---|---|---|
| appName | Yes | Application name | |
| windowIndex | No | 1-based window index | |
| windowTitle | No | Window title |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, and the description fails to disclose behavioral details such as behavior when the window is already minimized, effects on multi-window apps, or system permissions required.
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 extremely concise with a single sentence. While efficient, it could include a brief note on behavior without becoming verbose.
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 simple action tool with full schema coverage, the description is adequate. It could better handle edge cases or return value, but is sufficient given low complexity.
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 description does not need to add parameter details. The description adds no additional meaning beyond the schema definitions.
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 (minimizes), resource (window), and destination (to the Dock). It effectively distinguishes from sibling tools like resize_window or focus_window.
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 does not provide any guidance on when to use this tool versus alternatives like closing or hiding windows. No exclusions or prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
move_mouseA
Moves the mouse cursor to specified coordinates without clicking
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | X coordinate to move the cursor to | |
| y | Yes | Y coordinate to move the cursor to |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It clarifies that no clicking occurs but omits potential side effects like triggering hover events or coordinate system 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?
Single sentence, no wasted words, efficiently communicates the core action.
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 simple 2-parameter tool with no output schema, the description is mostly complete but lacks details about coordinate system (e.g., screen coordinates) and bounds, which could improve completeness.
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 coverage is 100% with descriptions for x and y. The tool description adds no additional meaning beyond what the schema provides, so baseline score of 3 is appropriate.
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 'moves' and the resource 'mouse cursor', and explicitly says 'without clicking', which distinguishes it from sibling tools like 'click' and 'drag'.
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 implies usage for moving the cursor without clicking but provides no explicit when-to-use or when-not-to-use guidance, nor mentions alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
move_windowB
Moves a window to specified x, y coordinates
| Name | Required | Description | Default |
|---|---|---|---|
| appName | Yes | Application name | |
| windowIndex | No | 1-based window index | |
| windowTitle | No | Window title | |
| x | Yes | New X coordinate | |
| y | Yes | New Y coordinate |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden but only states the basic action. It does not disclose important behaviors such as what happens if the window is minimized, whether coordinates are absolute or relative, error handling, or permission requirements.
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 sentence, concise and front-loaded. However, it could be improved by adding a bit more detail without becoming verbose, such as clarifying how window identification works.
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 complexity (5 parameters, 3 required, no output schema, no annotations), the description is insufficient. It does not explain how to select a window when multiple exist, what the output or return value is, or any edge cases.
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 all parameters are already documented in the schema. The description adds no additional meaning beyond 'to specified x, y coordinates', which is already implied by the parameter names.
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 'Moves a window to specified x, y coordinates' clearly states the action (move) and the resource (window) with specific parameters (x, y). It distinguishes itself from sibling tools like resize_window (resize) and focus_window (focus).
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 (e.g., resize_window or drag). No context about prerequisites or typical use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
press_keyB
Presses a key by name (Enter, Tab, Escape, F1-F12, Arrow keys, etc.)
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes | Key name to press (e.g., "enter", "escape", "tab", "delete", "f1"-"f12", arrow keys) | |
| repeat | No | Number of times to press the key |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries full burden. It only states the action without disclosing behavioral traits like what happens on invalid keys, whether it requires focused window, or if repeated presses are immediately sent. Minimal 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?
A single sentence that directly states the action and lists representative keys. No redundancy or wasted words.
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 simple tool with two parameters, the description is adequate but misses behavioral context and usage guidance. Agent can infer core function but may misinterpret edge cases or fail to choose the correct tool among 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 coverage is 100% and already includes clear descriptions for both parameters. The tool description adds examples but does not enrich beyond schema. Baseline of 3 is appropriate.
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?
Description uses a specific verb 'Presses' and specifies resource 'a key by name' with concrete examples (Enter, Tab, etc.), making the purpose immediately clear. It distinguishes from sibling tools like click or type_text by focusing on single key presses.
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 on when to use this tool versus alternatives such as key_combination (for multi-key shortcuts) or click (for mouse interactions). The agent is left to infer usage without explicit context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
quit_appA
Gracefully quits an application by name
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Application name to quit |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must carry behavioral info. 'Gracefully quits' implies a normal quit signal, but lacks details on error handling, unsaved changes, or permissions. Baseline level beyond schema.
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?
Single sentence, no wasted words, front-loaded with the action. Highly concise and efficient.
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 simple tool with one param and no output schema, missing context about error behavior (if app not found) and what 'gracefully' entails. Adequate but not exhaustive.
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 coverage is 100%, so description adds little beyond 'by name' which is already in schema. Baseline score applies because description does not provide additional meaning.
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 uses a specific verb 'quits' and clarifies the resource is 'application by name'. It clearly distinguishes from siblings like 'launch_app' which is the opposite operation.
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 on when to use this tool vs alternatives. No mention of prerequisites (e.g., app must be running) or when not to use (e.g., force quit scenarios).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resize_windowB
Resizes a window to specified width and height
| Name | Required | Description | Default |
|---|---|---|---|
| appName | Yes | Application name | |
| windowIndex | No | 1-based window index | |
| windowTitle | No | Window title | |
| width | Yes | New width in pixels | |
| height | Yes | New height in pixels |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description bears full responsibility for behavioral disclosure. It only states the action but does not mention failure modes, error handling, or whether the window must be active. Important traits like idempotency or constraints are omitted.
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, clear sentence that is front-loaded and wastes no words. However, it is slightly underspecified given the tool's complexity, which prevents a perfect score.
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?
With 5 parameters, no output schema, and no annotations, the description should provide more context on how to identify the window (e.g., when to use windowIndex vs windowTitle) and what happens when specifications are invalid. The current text is insufficient for reliable agent usage.
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 already provides descriptions for all 5 parameters (100% coverage). The tool description adds no additional semantic information beyond what the schema offers, so it meets the baseline but does not exceed it.
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 ('Resizes a window') and the parameters (width and height). It distinguishes this tool from sibling tools like move_window or minimize_window, which have different 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, nor does it mention prerequisites such as the window needing to be open or focused. Users are left to infer context from the tool name and siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reveal_in_finderB
Opens Finder and selects the specified file or folder
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | File or folder path to reveal in Finder |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavior. It fails to mention what happens if the path does not exist, whether it activates Finder, or if accessibility permissions are required. This lack of detail could lead to incorrect usage.
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 of 9 words. It is front-loaded with the main action and contains no unnecessary information.
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 simple one-parameter tool with no output schema, the description is nearly adequate. However, it lacks behavioral context such as error handling and permission requirements, which would improve completeness.
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 coverage is 100% with a clear description for the 'path' parameter. The tool description adds no new semantic value beyond the schema, which already explains the parameter 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?
Description clearly states the verb 'opens' and the resource 'Finder' with the specific action 'selects the specified file or folder'. It effectively distinguishes from sibling tools like get_finder_window_path or launch_app, which do not select files.
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 on when to use this tool versus alternatives, such as launch_app or get_selected_files. The description lacks context about prerequisites or scenarios where this tool is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scrollA
Scrolls in a specified direction (up, down, left, right) at optional coordinates
| Name | Required | Description | Default |
|---|---|---|---|
| direction | Yes | Direction to scroll | |
| amount | No | Scroll amount in pixels | |
| x | No | X coordinate to scroll at | |
| y | No | Y coordinate to scroll at |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It fails to disclose key behavioral traits: whether coordinates are relative to window or screen, behavior when coordinates are omitted, or whether the amount parameter is required. Only direction and optional coordinates are mentioned.
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?
Single sentence, front-loaded, no wasted words. Every word earns its place.
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 4 parameters with full schema coverage and no output schema, the description is adequate for a simple action. However, it lacks context on coordinate system, scroll behavior with or without coordinates, and relation to sibling tools.
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 baseline is 3. The description adds 'optional coordinates' but no extra semantic beyond what's in the schema. No new meaning or clarification of edge cases.
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 ('Scrolls'), the resource ('in a specified direction'), and scope ('at optional coordinates'). It distinguishes from sibling tools like 'scroll_to_element' which scrolls to a specific element.
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 explicit guidance on when to use this tool versus alternatives (e.g., scroll_to_element). The description implies usage for direction-based scrolling but does not specify when to choose this over other scrolling methods.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scroll_to_elementC
Scrolls until a UI element with specified text or role becomes visible
| Name | Required | Description | Default |
|---|---|---|---|
| appName | Yes | Application name containing the element | |
| elementPath | Yes | Path to the element to scroll into view |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided. The description implies repeated scrolling until visibility, but does not disclose behavior like auto-stopping criteria, timeout, or side effects. Lacks details on what happens if element is not found.
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?
Single sentence, front-loaded with action. Efficient but slightly vague. No extraneous content, but could be more precise.
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 simple tool with no output schema and siblings like 'scroll', the description lacks needed context. It does not explain the format of 'elementPath' or scroll behavior. Incomplete for effective selection.
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 coverage is 100%. The parameter descriptions are adequate but the tool's description introduces 'text or role' which does not correspond to the provided parameters, causing a mismatch. The description adds minimal value beyond schema.
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 scrolls until a UI element becomes visible. The verb 'scrolls' and resource 'UI element' are clear. However, it mentions 'text or role' which are not reflected in the input schema, causing some confusion.
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 on when to use this tool versus siblings like 'scroll'. No conditions or alternatives mentioned. The description is too brief to differentiate usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
send_notificationB
Displays a macOS notification with title, optional message, subtitle, and sound
| Name | Required | Description | Default |
|---|---|---|---|
| title | Yes | Notification title | |
| message | Yes | Notification body message | |
| subtitle | No | Optional subtitle | |
| sound | No | Play notification sound |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description does not disclose behavioral traits such as synchronous execution, permission requirements, or what happens on failure. Simply states the action without deeper 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?
Single sentence, no wasted words. Could be considered slightly terse but adequately concise for a simple tool.
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?
No output schema; description does not explain return value or error states. For a simple display tool, it covers the basics but lacks completeness on behavior and output.
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 baseline is 3. Description restates parameters ('title, optional message, subtitle, and sound') without adding new meaning beyond the schema.
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?
Clearly states the action ('Displays'), the resource ('macOS notification'), and lists components (title, message, subtitle, sound). Distinguishes from sibling tools as they focus on other macOS interactions (clicking, typing, etc.).
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 on when to use this tool versus alternatives or prerequisites. The description only states what it does, not when it's appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_clipboardB
Sets clipboard to specified text content
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Text content to set on clipboard |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully convey behavioral traits. While 'Sets clipboard' implies mutation, it does not disclose whether the operation overwrites existing content, requires permissions, or has side effects. This minimal transparency is insufficient for a complete understanding.
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 extremely concise with a single sentence that conveys the essential information. No unnecessary words or redundant details are present, making it efficient and front-loaded.
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 simple setter tool with one parameter and no output schema, the description is adequate but not rich. It explains the basic action but lacks additional context such as what happens on success or failure, which would be beneficial for completeness.
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% coverage with a clear description for the single 'text' parameter. The tool description adds no extra meaning beyond the schema, so a baseline score of 3 is appropriate.
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 'Sets' and resource 'clipboard' with the specific content type 'text content', making the purpose unambiguous. However, it does not distinguish itself from the sibling 'get_clipboard' tool, which could be useful for completeness.
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 'get_clipboard'. There is no mention of prerequisites, contexts, or exclusions, leaving the agent without context for appropriate invocation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_muteA
Mutes or unmutes system audio
| Name | Required | Description | Default |
|---|---|---|---|
| muted | Yes | Mute state |
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 clearly states the tool sets mute state, which is adequate for a simple boolean mutation. However, it could mention that setting 'muted' to true mutes and false unmutes, which is already implied.
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 concise sentence with no unnecessary words. It is front-loaded and every word earns its place.
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 (one boolean parameter, no output schema), the description fully covers what the tool does and what the parameter means. No additional information 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 coverage is 100% but the schema description for 'muted' is minimal ('Mute state'). The tool description adds context by linking the parameter to muting/unmuting system audio, providing meaning beyond the schema.
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 'Mutes or unmutes system audio', using a specific verb and resource. It distinguishes from sibling tools like 'get_mute_status' (read) and 'set_volume' (volume level).
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 explicit guidance on when to use versus alternatives. The usage is implied: to change mute state. No exclusions or context like prerequisites are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_ui_element_valueB
Sets the value of an editable UI element (text fields, sliders, etc.)
| Name | Required | Description | Default |
|---|---|---|---|
| appName | Yes | Application name containing the element | |
| elementPath | Yes | Path to the element | |
| value | Yes | Value to set |
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 only states the basic action without detailing idempotence, error handling, waiting behavior, or what happens after setting (e.g., whether it returns a result or throws).
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 sentence of 14 words, front-loaded with the core action. It is concise and to the point, though it could include more behavioral details without losing conciseness.
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?
The tool has no output schema and no annotations. The description does not explain return values, success/failure indicators, or side effects. Given the presence of 40+ sibling tools, more context is needed for correct tool selection.
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 already describes all three parameters with 100% coverage. The description adds no additional meaning beyond what the schema provides, so the baseline score of 3 is appropriate.
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 uses a specific verb ('Sets') and resource ('value of an editable UI element'), with examples (text fields, sliders). It clearly distinguishes from siblings like 'click_ui_element' and 'type_text' by focusing on direct value assignment to editable elements.
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 on when to use this tool versus alternatives such as 'type_text' or 'click_ui_element'. The description does not mention prerequisites, limitations, or context for choosing this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_volumeB
Sets the system volume to a specified percentage (0-100)
| Name | Required | Description | Default |
|---|---|---|---|
| value | Yes | Volume percentage (0-100) |
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 does not mention side effects (e.g., whether change is immediate, persistent, or requires permissions). The description is too minimal for full 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?
Single sentence with no fluff, but slightly redundant with the parameter description. Efficient for a simple tool.
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 single-parameter setter with no output schema, the description covers the essential information. However, mentioning that the volume scale is linear or that get_volume can be used to read current volume would improve completeness.
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 coverage is 100%, and the parameter 'value' is already well-described with min/max and description. The description adds no new semantic value beyond what the schema provides, so baseline 3 applies.
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 ('Sets'), the object ('system volume'), and the allowed range ('0-100'). It distinguishes from sibling tools like get_volume (reads) and set_mute (toggles mute).
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 on when to use this tool versus alternatives (e.g., set_mute, or checking current volume with get_volume). No mention of prerequisites or typical use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
take_screenshotA
Captures a screenshot of the screen, display, window, or region. Auto-resized to max 1600px and compressed to max 1.8MB for API compatibility (both file and base64 output). Use rawFile: true to save at full resolution, or maxDimension/maxFileSize: 0 to disable processing
| Name | Required | Description | Default |
|---|---|---|---|
| display | No | Display number to capture (1-based) | |
| windowId | No | Window ID to capture | |
| region | No | Region coordinates for partial capture | |
| format | No | Output format (png or jpg) | png |
| filePath | No | File path to save screenshot (returns base64 if not specified) | |
| maxDimension | No | Maximum dimension (width or height). Default: 1600. Set to 0 to disable resizing. Applies to both file and base64 output. | |
| maxFileSize | No | Maximum file size in bytes. Default: 1800000 (1.8MB). Set to 0 to disable compression. Applies to both file and base64 output. | |
| quality | No | JPEG quality for compression (1-100). Default: 85. Only used when compression is applied. | |
| rawFile | No | Skip resize/compression for file output. Default: false. Set to true to save at full resolution. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description discloses key behaviors: auto-resizing to 1600px, compression to 1.8MB, and how to disable them. It also mentions both file and base64 output. Minor omissions like timeout or error handling are acceptable for a screenshot 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 three sentences, front-loaded with purpose, and every sentence adds crucial information. No unnecessary words.
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 (9 parameters, nested region object, no output schema, no annotations), the description covers purpose, default behaviors, and options. It could mention return format details more explicitly, but overall it is complete enough for an agent to use 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?
All 9 parameters have descriptions in the schema (100% coverage). The description adds value by explaining default values (e.g., maxDimension 1600) and how to disable processing, which enhances the schema's information.
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 captures a screenshot of screen, display, window, or region. It distinguishes itself from siblings by being the only screenshot capture tool among many UI interaction tools.
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 usage context (e.g., when to use rawFile for full resolution) and notes that processing is applied by default. It does not explicitly state when not to use it or list alternatives, but the sibling list shows no other screenshot tool, making the guidance adequate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
type_textB
Types text at the current cursor position with optional delay between characters
| Name | Required | Description | Default |
|---|---|---|---|
| text | Yes | Text to type at the current cursor position | |
| delay | No | Delay between keystrokes in milliseconds |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full behavioral burden. It fails to disclose important traits: app focus requirement, character simulation detail, or side effects like overwriting existing text.
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?
Single sentence, front-loaded with action and location, no wasted words.
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 simple tool with 2 params and no output schema, the description is minimal but adequate. It misses context on focus, error handling, and special character behavior.
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 already describes both parameters with 100% coverage. The description adds 'with optional delay' but does not significantly enhance understanding beyond the schema.
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 (types text), the location (current cursor position), and an option (delay). It distinguishes from siblings like click, key_combination, and set_clipboard.
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 on when to use vs. alternatives (e.g., set_clipboard + paste). Does not mention when not to use or prerequisite conditions like app focus.
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.
44 tool updates
v0.1.3- Added
activate_app - Added
click - Added
click_menu_item - Added
click_status_bar_item - Added
click_status_bar_menu_item - Added
click_ui_element - Added
double_click - Added
drag - Added
focus_ui_element - Added
focus_window - Added
get_battery_status - Added
get_clipboard - Added
get_display_info - Added
get_finder_window_path - Added
get_menu_bar_structure - Added
get_menu_item_state - Added
get_mute_status - Added
get_selected_files - Added
get_system_info - Added
get_ui_element_value - Added
get_ui_elements - Added
get_volume - Added
key_combination - Added
launch_app - Added
list_menu_items - Added
list_running_apps - Added
list_status_bar_items - Added
list_windows - Added
minimize_window - Added
move_mouse - Added
move_window - Added
press_key - Added
quit_app - Added
resize_window - Added
reveal_in_finder - Added
scroll - Added
scroll_to_element - Added
send_notification - Added
set_clipboard - Added
set_mute - Added
set_ui_element_value - Added
set_volume - Added
take_screenshot - Added
type_text
TDQS
Most tools have distinct purposes, but the multiple click variants (click, click_menu_item, click_status_bar_item, etc.) and focus tools (focus_window, focus_ui_element) could cause slight confusion. Descriptions help differentiate them.
All tool names follow a consistent verb_noun pattern in snake_case, e.g., `launch_app`, `set_volume`, `take_screenshot`. No mixing of conventions.
44 tools is on the high side for a single server, covering a broad range of Mac automation tasks. While each tool serves a purpose, the count is borderline heavy and might benefit from consolidation.
The tool set covers core macOS automation areas: UI interaction, system info, app management, clipboard, notifications, and screenshots. Minor gaps exist (e.g., no AppleScript execution), but the surface is largely complete for its domain.
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
Let ChatGPT, Claude & Cursor use your Mac: email, calendar, iMessage, Teams, files. Local, free.
Automate 1,000+ services from any MCP-compatible AI agent: build Applets, run actions and queries.
- mcp-serverOAuthcom.make
Give your AI agents the tools to build, manage, and run automation workflows.
Drive real Android & iOS devices and web browsers from natural language for mobile + web QA. 290+ tools across device control, app management, automation sessions, browser automation, and flow recording / replay. Bearer-auth — get a token at robotactions.com → Profile → API Tokens.
Related MCP Servers
- AlicenseAqualityDmaintenanceProvides native macOS computer control tools including mouse and keyboard simulation, screenshot capture, and application management for MCP-compatible agents. It enables AI assistants to directly interact with the macOS operating system and installed apps through standard tool calls.24618MIT
- AlicenseNot gradedqualityFmaintenanceEnables AI assistants to automate macOS desktop tasks including mouse control, keyboard input, screenshots, window management, and UI interaction.14414MIT
- FlicenseBqualityDmaintenanceEnables macOS automation through 45 AppleScript-powered tools for system control, app management, calendar, reminders, notifications, clipboard, and task scheduling.45-
- AlicenseAqualityDmaintenanceEnables AI agents to control macOS desktop apps via screenshots, mouse clicks, keyboard input, accessibility queries, and AppleScript.1115MIT
Appeared in Searches
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/ryota-murakami/mac-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server