cua-local
Provides tools to control a local macOS computer, including reading app/screen state, mouse movement, clicking, typing, scrolling, dragging, pressing keys, and opening URLs.
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., "@cua-localopen Safari, navigate to google.com, and type 'weather today'"
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.
cua-local
Use ChatGPT with MCP to control your local Mac, similar to Computer Use.
cua-local is a small local bridge that lets ChatGPT, or another MCP-compatible AI client, observe and operate your own Mac in a controlled loop:
observe -> act -> observeIt can expose basic tools for reading app/screen state, moving the mouse, clicking, typing, scrolling, dragging, pressing keys, and opening URLs. Everything runs locally on macOS, while the AI assistant connects through MCP.
How it works
cua-local uses native macOS capabilities:
AppleScript / Apple Events for app control
System Events for keyboard input
screencapturefor screen observationSwift + CGEvent for mouse movement, clicks, scroll, and drag
In other words: it gives ChatGPT a local Computer Use-like control layer for your Mac through MCP. It is inspired by the Computer Use idea, but it is not an official Computer Use client and not a full desktop automation product.
Related MCP server: macos-mcp
Quick start
Requirements:
macOS
Node.js >= 20
Xcode Command Line ToolsRun:
npm run doctor
npm run check
npm run smoke
npm run demonpm run doctor prints a ready-to-copy MCP config for the current checkout.
Does it require DevSpace?
No. cua-local itself is just a local MCP server and can run on its own.
DevSpace is only one possible bridge when you want to call this local MCP server from ChatGPT. If your AI client can launch local MCP servers directly, you do not need DevSpace. If the client runs in the cloud and cannot directly reach your Mac, you need some bridge such as DevSpace, a tunnel, or another remote MCP connection layer.
Typical setups:
Local MCP client -> cua-local -> your Mac
ChatGPT -> DevSpace/tunnel/bridge -> cua-local -> your MacMCP config
Use absolute paths on the target machine:
{
"mcpServers": {
"computer-use-local": {
"command": "node",
"args": ["/ABSOLUTE/PATH/TO/cua-local/cua-local.mjs"],
"cwd": "/ABSOLUTE/PATH/TO/cua-local"
}
}
}Scripts
npm run start # start MCP server over stdio
npm run doctor # check dependencies and macOS permissions
npm run check # syntax-check project scripts
npm run smoke # lightweight core validation
npm run demo # safe observe -> move pointer -> observe sampleTools
list_appsget_app_stateget_screen_statehealth_checkopen_urltype_textpress_keymove_mouseclickscrolldragset_value
Safety
This tool can operate the local computer. Only connect it to MCP hosts you trust.
click blocks common high-risk labels such as Buy, Purchase, Pay, Delete, Remove, Send, Submit, Publish, Share, Update, and Install unless confirm_risk_action=true is explicitly provided.
Do not expose this server to the public internet.
Local files not to commit
cua-local.mcp.json
.env
traces/
/tmp/cua-local-*
~/.cua-local/Limitations
Native app support is partial and app-specific.
Chrome webpage DOM exposure is limited by macOS Accessibility.
Multi-display screenshot stitching still needs hardening.
Trace writing is opt-in via
CUA_LOCAL_TRACE=1orCUA_LOCAL_TRACE_DIR=....
License
MIT. See LICENSE.
Available Tools
12 toolsclickA
Click screen coordinates or an accessibility element center using CGEvent. Use element_index from get_app_state when possible.
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | ||
| y | No | ||
| app | Yes | ||
| click_count | No | ||
| display_index | No | ||
| element_index | No | ||
| coordinate_space | No | ||
| confirm_risk_action | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses the mechanism (CGEvent) and scope (coordinates or element center). However, it omits details about side effects (e.g., mouse movement, permission requirements) and the behavior of parameters like coordinate_space or confirm_risk_action.
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?
Two concise sentences, front-loaded with the primary action. No unnecessary words. Every sentence 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?
Given 8 parameters and no output schema, the description is insufficient. It fails to explain coordinate_space (e.g., screen vs window coordinates), confirm_risk_action's purpose, or the effect of click_count. The agent may misinterpret 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?
With 0% schema coverage, description must compensate but only mentions x, y, and element_index. It does not explain app, click_count, display_index, coordinate_space, or confirm_risk_action, leaving the agent to infer from parameter names alone.
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 tool clicks on screen coordinates or an accessibility element using CGEvent. It explicitly mentions using element_index from get_app_state, distinguishing it from siblings like drag or press_key.
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?
Provides a clear usage hint: 'Use element_index from get_app_state when possible.' This guides the agent to prefer element indices for reliability. However, it does not specify when to avoid using this tool or mention alternatives beyond a single sibling reference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
dragC
Drag from one screen coordinate to another using CGEvent.
| Name | Required | Description | Default |
|---|---|---|---|
| app | Yes | ||
| to_x | Yes | ||
| to_y | Yes | ||
| from_x | Yes | ||
| from_y | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits. It mentions 'using CGEvent' but does not explain the underlying mechanism (e.g., mouse down, move, up). It does not disclose whether the drag is a left-click drag, how the 'app' parameter is used, or the coordinate system.
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, which is concise but lacks essential information. It fails to add value beyond the tool name and input schema structure.
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 five required parameters and no output schema or annotations, the description should explain each parameter and the tool's behavior. It does not, leaving the tool under-defined for an AI agent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must explain parameters. It does not define any of the five parameters (app, from_x, from_y, to_x, to_y), leaving their meanings ambiguous.
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 (drag) and the resources (screen coordinates). It distinguishes from siblings like 'click' and 'move_mouse' because drag implies a press-hold-move action, but the description does not explicitly mention this.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like 'click' or 'move_mouse'. There is 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.
get_app_stateB
Get the app state: front window info, Chrome title/url when available, lightweight accessibility tree, and optional screenshot.
| Name | Required | Description | Default |
|---|---|---|---|
| app | Yes | ||
| include_screenshot | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses what is returned but lacks details on side effects, permissions, error behavior, or whether the operation is read-only. The term 'lightweight accessibility tree' hints at scope but is vague.
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 verb and resource, no redundant words. Each element listed 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?
For a tool with 2 parameters, no output schema, and no annotations, the description adequately covers the returned data but lacks details on parameter format, error cases, and return structure. It is minimally 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?
Schema coverage is 0%, so description must compensate. It mentions 'optional screenshot' relating to include_screenshot, but does not explain the 'app' parameter (e.g., expected format). Minimal parameter information is provided.
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 app state and lists specific components (front window info, Chrome title/url, accessibility tree, optional screenshot). This distinguishes it from siblings like get_screen_state which likely returns screen-wide information.
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., get_screen_state). The description does not specify scenarios where this tool is appropriate or inappropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_screen_stateA
Return display, screenshot, mouse, Retina scale, and coordinate-space diagnostics for calibration.
| 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 but only states it returns diagnostics. It does not mention that the tool is read-only/non-destructive, nor does it disclose any side effects 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 focused sentence, front-loading the key purpose, with no redundant or 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 no output schema or annotations, the description could be more complete by describing the return format or structure. However, for a zero-parameter diagnostic tool, it adequately summarizes the tool's output categories.
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 no parameters and schema coverage is 100%. The description adds meaning by listing what the output covers (display, mouse, etc.), which goes beyond the empty 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 explicitly lists the diagnostic categories (display, screenshot, mouse, Retina scale, coordinate-space calibration), clearly distinguishing it from sibling tools like get_app_state (app state) or health_check (general health).
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 use for calibration setup but provides no explicit guidance on when to use this tool versus alternatives or any prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
health_checkB
Return server version, dependency, permission, log, and optional screen diagnostics.
| Name | Required | Description | Default |
|---|---|---|---|
| include_logs | No | ||
| include_screen | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; the description does not disclose whether the tool is read-only, requires permissions, or has side effects such as capturing screen data.
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 key return values, though it could be more structured with bullet points or clearer separation of diagnostics.
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 (two optional booleans, no output schema), the description covers the main return categories adequately, though it lacks detail on individual diagnostics.
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 0%: the description only hints that 'include_logs' and 'include_screen' correspond to 'log' and 'screen diagnostics' but does not explain them fully.
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 returns server version, dependency, permission, log, and optional screen diagnostics, distinguishing it from sibling GUI automation 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; however, the tool's diagnostic nature is implied by its name and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_appsA
List running GUI apps on this Mac. Local adapter; no Codex login required.
| 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. It only states the basic function without disclosing return format, edge cases, or performance traits. 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?
Two sentences, no unnecessary words. Perfectly 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?
For a tool with no parameters and a simple purpose, the description is mostly adequate but lacks information about the output format, which could be important for the 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?
No parameters exist, and schema coverage is 100%. Baseline 4 is appropriate as there is nothing to document beyond the empty schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the verb 'list' and resource 'running GUI apps on this Mac', distinguishing it from sibling tools which are all actions like click, drag, 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?
Provides context about being local and requiring no login, which helps the agent decide when to use it, though it doesn't explicitly state alternatives or when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
move_mouseB
Move the visible mouse pointer to screen coordinates or an accessibility element center without clicking.
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | ||
| y | No | ||
| app | Yes | ||
| display_index | No | ||
| element_index | No | ||
| coordinate_space | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description notes the mouse does not click, which is useful, but lacks details on behavior for invalid coordinates, missing elements, or multiple displays.
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 efficient and front-loaded, conveying the essential purpose without extraneous text.
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 is too minimal for a tool with 6 parameters and no output schema; it does not cover how to coordinate parameters or the return 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?
With 0% schema description coverage, the description does not explain any of the 6 parameters (x, y, app, display_index, element_index, coordinate_space), failing to add 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 the tool moves the visible mouse pointer to screen coordinates or an accessibility element center 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?
No guidance on when to use this tool compared to alternatives like 'click' or 'drag'. Lacks information on prerequisites or expected usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
open_urlC
Open an http(s) URL in Google Chrome. Local helper for browser smoke tests.
| Name | Required | Description | Default |
|---|---|---|---|
| app | Yes | ||
| url | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description must disclose behavioral traits. It states the core action but doesn't mention side effects (e.g., bringing Chrome to foreground), required state (e.g., Chrome must be open), or error handling. Minimal transparency for a tool with no annotations.
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, short sentence with no wasted words. It is front-loaded with the main action. However, it could be more structured (e.g., list parameters) without losing conciseness; as such, it is efficient but not maximally informative.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 2 required parameters with no schema descriptions, no output schema, and no annotations, the description is incomplete. It does not explain the 'app' parameter, expected return value, or constraints. A more complete description would address these gaps.
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 0%, so description must compensate. It fails to define the 'app' parameter or clarify the format of 'url'. The description adds no parameter-level meaning beyond the schema's structure, offering zero value for parameter 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 action: 'Open an http(s) URL in Google Chrome.' It identifies the specific resource and verb, distinguishing it from sibling tools like click or drag. The additional 'Local helper for browser smoke tests' provides context but is not required for purpose clarity.
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. The description implies it's for browser smoke tests but does not exclude other scenarios or mention prerequisites. Lacks explicit when-to-use or when-not-to-use instructions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
press_keyB
Press a key or key-combination. Examples: Return, Tab, cmd+l, command+r, shift+cmd+r.
| Name | Required | Description | Default |
|---|---|---|---|
| app | Yes | ||
| key | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It states the action and gives examples but does not disclose error handling, prerequisites (e.g., app must be focused), or side effects. 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?
Two sentences, front-loaded with the core action, followed by practical examples. No superfluous words; every sentence 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?
For a simple key-press action, the description covers the basic functionality and gives examples. However, it lacks details on the 'app' parameter and does not specify return values or error conditions, leaving gaps.
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 0% description coverage. The description adds meaning for 'key' via examples but does not explain the 'app' parameter (e.g., what format or valid values). Incomplete parameter documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Press a key or key-combination.' Examples like 'Return, Tab, cmd+l' make the purpose specific and distinct from sibling tools like click or type_text.
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 like type_text or click. The examples imply typical usage, but there is no 'when not to use' or comparison with siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scrollC
Scroll the active app by pages in a direction.
| Name | Required | Description | Default |
|---|---|---|---|
| app | Yes | ||
| pages | No | ||
| direction | Yes | ||
| element_index | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description mentions scrolling 'by pages' and 'in a direction', giving some behavioral clues. But it doesn't explain what 'pages' means, whether it's smooth or instant, or how 'element_index' affects behavior. Since no annotations exist, the description carries full burden and 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 short sentence, which is concise, but it omits critical information like parameter details. It is front-loaded but lacks substance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 4 parameters and no output schema, the description is too sparse. It doesn't explain return values, prerequisites (e.g., app must be active), or how to use optional parameters like 'pages' or 'element_index'. Incomplete for confident 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?
With 0% schema description coverage, the description should compensate but only mentions 'pages' and 'direction' without details. It doesn't explain 'app', 'element_index', or valid values for 'direction'. The parameter semantics are unclear.
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 'scroll' and the resource 'active app', with modifiers 'by pages in a direction'. However, it does not distinguish this tool from siblings like 'drag' or 'press_key' which might also affect scrolling.
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. The description only states what it does, not when to prefer it over e.g., 'drag' or 'press_key' for scrolling.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_valueC
Set value for a focused or known field. For Chrome, element_index="address_bar" sets the address bar.
| Name | Required | Description | Default |
|---|---|---|---|
| app | Yes | ||
| value | Yes | ||
| element_index | Yes |
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 says 'Set value', implying a write operation, but provides no details on side effects, permissions, or limitations (e.g., whether it overwrites existing values).
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 two sentences and no redundant text. However, it lacks structure (e.g., parameter explanations) which could improve readability.
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 absence of annotations and output schema, and three required parameters with no descriptions, the description is insufficient. It fails to explain what a 'focused or known field' means, prerequisites, or error handling.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage; the description partially explains the element_index parameter with a Chrome example, but does not clarify the meaning of app or value. This leaves significant ambiguity for the agent.
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 states the tool sets a value for a focused or known field, and provides a Chrome-specific example. This gives a clear verb and resource, but does not explicitly distinguish it from similar sibling tools like type_text, which may also set values.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives like type_text or click. The description lacks context for proper selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
type_textB
Type literal text into the active app using macOS System Events.
| Name | Required | Description | Default |
|---|---|---|---|
| app | Yes | ||
| text | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description bears full responsibility for disclosing behavior. It states the tool simulates keystrokes via system events but fails to mention potential issues like character handling, rate limits, or what happens if the app is not active.
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 of 12 words, efficient and front-loaded. However, it could incorporate minimal parameter guidance without significant bloat, slightly reducing the score from perfect.
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 annotations, no output schema, and two parameters, the description conveys the core action but omits crucial context about the app parameter usage and return behavior, leaving moderate gaps.
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 0%, demanding the description add meaning. While 'text' is self-explanatory, 'app' lacks details on whether it requires the app name, process ID, or bundle identifier, and whether the app must already be running or will be launched.
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 ('type'), the resource ('literal text'), and the target ('active app') using a specific mechanism ('macOS System Events'). It effectively distinguishes the tool from siblings like press_key and set_value.
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 press_key or set_value. No prerequisites (e.g., app must be frontmost) or context for when typing is appropriate are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Tools are mostly distinct, with mouse actions (click, drag, move_mouse) clearly separated. Potential confusion between set_value and type_text is mitigated by descriptions.
All tool names follow a consistent verb_noun snake_case pattern, with clear verb choices like get_, list_, open_, press_, etc.
12 tools is well-scoped for a local GUI automation server, covering mouse, keyboard, app state, and device diagnostics without excess.
Core interactions (click, type, scroll, open URL) are covered. Minor gaps like window management exist, but the set is functional for typical workflows.
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.
Human-input bridge for AI agents with voice-first answer links, MCP tools, and HTTP APIs.
MCP connector that lets ChatGPT list, search, and run your Apple Shortcuts via a local Mac agent
Automate 1,000+ services from any MCP-compatible AI agent: build Applets, run actions and queries.
Related MCP Servers
- AlicenseNot gradedqualityFmaintenanceAn experimental MCP server providing full control over the macOS user interface through mouse, keyboard, and window management tools. It enables AI assistants to automate desktop tasks by utilizing native accessibility APIs and OCR for real-time screen comprehension.7Creative Commons Zero v1.0 Universal
- AlicenseNot gradedqualityAmaintenanceA lightweight MCP server that bridges AI agents and macOS, enabling automation of file navigation, application control, UI interaction, browser automation, and system operations.159MIT
- AlicenseNot gradedqualityCmaintenanceStandalone MCP server that gives AI agents full GUI control over macOS — screenshots, mouse, keyboard, apps, clipboard, and multi-display — with zero private dependencies.18MIT
- AlicenseNot gradedqualityDmaintenanceMCP server that enables AI to fully control macOS — mouse, keyboard, terminal, screenshots, window management, UI element detection, and provides AI-optimized information reporting.20MIT
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/uxnew/cua-local'
If you have feedback or need assistance with the MCP directory API, please join our Discord server