Open-source Windows RPA and MCP server for desktop UIA, browser DOM, ERP, and AI agent automation
Server has 33 tools with consistent naming (verb_noun pattern) and descriptions present for all. However, parameter descriptions are minimal or absent for many tools. Input schemas are visible but lack depth, most parameters have type but minimal constraint documentation. Output schemas are not documented. Error handling exists but lacks recovery guidance. Tool composition is reasonable (single responsibility mostly observed), but parameter design could better match chat data model (e.g., accepting element names alongside IDs). Average tool description length ~80 chars (below 194 baseline), and many parameter descriptions are single-word or missing entirely.
Report the active automation backend and whether UI-changing actions are enabled.
Capture a resolved element and save it to the element library with a name.
Click a resolved element. Requires actions to be enabled and confirmation.
Create a new folder in the element library.
Create a new element project.
Delete a saved element from the element library.
Delete a folder from the element library.
Delete an element project.
Parameter descriptions are minimal or single-word. E.g., 'variables' described as 'Optional variables for selector substitution' lacks detail on structure, format, or examples. LLMs cannot infer valid variable formats.
Output schemas are not documented. Tools return structured objects (e.g., element locators, status dicts) but no schema is visible in code or descriptions. LLMs cannot plan downstream calls without knowing response structure.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 67 | 2025-06-18+ | v2 |
Export the element library to a JSON file.
Find UIA elements by stable properties, optionally within a previously resolved scope.
Move keyboard focus to a resolved element. Requires actions to be enabled.
Return the active element project and its library path.
Return direct child elements beneath a resolved element.
Resolve a previously returned locator against the current UI and return fresh state.
Get an element by stable id, unique name, or full path such as Login/Username.
Draw a temporary outline around a resolved element without changing application state.
Import elements from a JSON file into the element library.
Inspect the element at a screen point, or at the current cursor when coordinates are omitted.
List the mature open-source components used by the automation stack and their roles.
Invoke a resolved element's default action. Requires actions to be enabled and confirmation.
List local element projects. Each project owns an independent element library.
List saved folders and elements as a Blue Prism-style hierarchy.
List saved elements with their stable tree paths and reusable locators.
List visible top-level UI Automation elements and return reusable locators.
Move a saved element to a different folder in the element library.
Move a folder to a different parent in the element library.
Rename a saved element in the element library.
Rename a folder in the element library.
Execute a sequence of automation steps in a single call. Requires actions to be enabled.
Send keyboard input to a resolved element. Requires actions to be enabled and confirmation.
Set the active element project.
Set the value of a resolved element. Requires actions to be enabled and confirmation.
Resolve a saved element against the live UI and return its fresh properties.
Error handling lacks recovery guidance. Code shows generic error wrapping (_result, _uia_result) returning {ok, error, message} but no actionable next steps. E.g., 'Element not found' should suggest 'Try list_windows() or find_elements() first.'
Destructive operations (delete_element, delete_folder, delete_project) lack confirmation or dry-run support. Agents can irreversibly delete without explicit user approval, violating confirmation-request pattern.
Tool annotations (readOnlyHint, destructiveHint, idempotentHint) are not visible in schema. Risk levels are documented in the spec (READ_ONLY, WRITE, DESTRUCTIVE) but not exposed as tool metadata for client-side filtering.