Skip to main content
Glama
verisoft-ai

windows2-mcp

by verisoft-ai

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
APPIUM_HOSTNoHost of the running Appium server127.0.0.1
APPIUM_PORTNoPort of the running Appium server4723

Instructions

Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.

This server publishes no instructions, or was last inspected before Glama recorded them.

Capabilities

Features and capabilities supported by this server

Protocol revision2025-11-25

CapabilityDetails
tools
{
  "listChanged": true
}

Tools

Functions exposed to the LLM to take actions

NameDescription
create_sessionA

Launch a Windows application and start a new Appium session. Ask the user before calling — confirm they want a new app instance launched.

attach_sessionA

Attach to an existing Appium session by session ID. Ask the user to provide the session ID — it is visible in Appium Inspector or in the Appium server logs next to the session creation event.

delete_sessionA

End the current Appium session and close the app. Only call this when the user explicitly asks to stop or end the session. Never call autonomously — always confirm with the user before terminating.

get_session_statusA

Check whether a session is currently active in this MCP server instance.

find_elementA

Find a single UI element in the current app window. Returns an element ID string. Returns an error if not found. Preferred strategy order for reliable automation: 1) "accessibility id" (AutomationId) — most stable, use whenever available 2) "name" — good for static labels not subject to localization 3) "xpath" — flexible fallback, e.g. //Button[@Name="OK"] 4) other strategies — use only when the above are unavailable. After interacting with an element you plan to use in generated test code, call get_element_info to capture the best locator.

find_elementsA

Find all UI elements matching the selector. Returns a JSON array of element ID strings. Preferred strategy order for reliable automation: 1) "accessibility id" (AutomationId) — most stable, use whenever available 2) "name" — good for static labels not subject to localization 3) "xpath" — flexible fallback, e.g. //Button[@Name="OK"] 4) other strategies — use only when the above are unavailable. After interacting with an element you plan to use in generated test code, call get_element_info to capture the best locator.

find_child_elementA

Find a child element scoped to a known parent element's subtree. Use when the same selector exists in multiple parts of the UI and you need to narrow the search. Preferred strategy order for reliable automation: 1) "accessibility id" (AutomationId) — most stable, use whenever available 2) "name" — good for static labels not subject to localization 3) "xpath" — flexible fallback, e.g. //Button[@Name="OK"] 4) other strategies — use only when the above are unavailable. After interacting with an element you plan to use in generated test code, call get_element_info to capture the best locator.

wait_for_elementA

Wait for a UI element to appear within a configurable timeout, then return its element ID. Useful after dialog opens, page transitions, or loading spinners disappear. Preferred strategy order for reliable automation: 1) "accessibility id" (AutomationId) — most stable, use whenever available 2) "name" — good for static labels not subject to localization 3) "xpath" — flexible fallback, e.g. //Button[@Name="OK"] 4) other strategies — use only when the above are unavailable. After interacting with an element you plan to use in generated test code, call get_element_info to capture the best locator.

click_elementA

Click a UI element by its element ID. Targets the element directly — does not require the window to be focused or in the foreground.

set_valueA

Set the text value of an input element (clears first then types). Sets the value directly on the element — does not require the window to be focused or in the foreground.

clear_elementB

Clear the text content of an input element.

get_textA

Get the visible text content of a UI element.

get_attributeA

Get an attribute or property of a UI element. Common attributes: Name, AutomationId, ClassName, IsEnabled, IsOffscreen, ControlType, Value.Value. Returns an empty string when the attribute is absent.

is_element_displayedA

Check whether a UI element is visible on screen (not off-screen).

is_element_enabledA

Check whether a UI element is enabled and interactable.

is_element_selectedA

Check whether a checkbox, radio button, or toggle is checked/selected. Works for both UIA and Java Swing elements. Returns "true" or "false". Note: tri-state (indeterminate) checkboxes return "false" — indeterminate cannot be distinguished from unchecked via this tool.

get_element_infoA

Retrieve all key UIA properties of an element and get ranked selector suggestions for test automation. Returns: Name, AutomationId, ClassName, ControlType, IsEnabled, and a prioritized list of selectors. ALWAYS call this after find_element when generating automated test code — it gives you the best locator to use. Selector reliability order: accessibility id (AutomationId) = highest → name → xpath → class name = lowest. For .NET/C# Appium: use MobileBy.AccessibilityId(automationId) when AutomationId is non-empty.

get_active_elementA

Get the element ID of the element that currently has keyboard focus.

get_element_tag_nameA

Get an element's tag name (its UIA ControlType in native context, or HTML tag name in IE/webview context).

get_element_rectB

Get the position (relative to the app window) and size of an element.

get_element_screenshotA

Take a screenshot cropped to a single element, returned as base64 PNG. Not supported in IE context.

get_page_sourceA

Get the XML representation of the current UIA element tree. Use as the source of truth for current UI state — call whenever you are unsure what is on screen or after a UI change (navigation, dialog, window switch). Inspect the result to discover element Names and AutomationIds.

get_window_rectA

Get the position and size of the current app window.

get_window_handlesA

Get all available window handles for the current session. Use when the app has multiple windows.

get_windowsA

Get all visible windows including untitled ones. Returns an array of { handle, title, className } objects. Use handle to switch to any window (including those with no title) via switch_to_window. Use className to identify untitled windows such as popups and dialogs.

switch_to_windowA

Switch focus to a different window by its handle (from get_window_handles).

switch_to_window_by_titleA

Switch focus to a window by its title. By default uses case-insensitive substring matching so partial titles work (e.g. "Notepad" matches "Untitled - Notepad"). Set exact=true to require a full case-insensitive match.

maximize_windowB

Maximize a window element via the UIA Window pattern.

minimize_windowB

Minimize a window element via the UIA Window pattern.

restore_windowA

Restore a minimized or maximized window to its normal state via the UIA Window pattern.

close_windowA

Close a window element via the UIA Window pattern.

get_monitorsA

List all connected monitors with their bounds, working area, device name, and whether each is the primary display.

switch_to_frameA

Switch context into an iframe or frame inside an IE window. After switching, element finds are scoped to that frame's document. Provide exactly one of: index (0-based integer), name (frame name/id attribute), or elementId (element ID of the iframe element). Only supported in IE context (after switch_to_window targeting an IE window).

switch_to_parent_frameA

Switch context to the parent frame of the current frame. Only supported in IE context; behaves the same as switch_to_default_content there.

navigate_backA

Navigate back (Alt+Left) in the current window's history.

navigate_forwardA

Navigate forward (Alt+Right) in the current window's history.

get_window_titleA

Get the title (Name property of the root window element) of the current window.

get_current_window_handleA

Get the handle of the current window (as a hex HWND string, e.g. "0x00abc123").

maximize_current_windowA

Maximize the current session's root window (whole-window operation — does not require an elementId, unlike maximize_window).

minimize_current_windowA

Minimize the current session's root window (whole-window operation — does not require an elementId, unlike minimize_window).

set_window_rectA

Move and/or resize the current session's root window. Restores the window to normal state first (move/resize fail while maximized or minimized). Pass null for any of x/y/width/height to leave that dimension unchanged.

switch_to_default_contentA

Switch back to the top-level document after a switch_to_frame call. Required before interacting with elements outside the frame. Only supported in IE context.

advanced_clickA

Perform a click at an element or absolute screen coordinates, with optional modifier keys, multiple clicks, or custom duration. Use for right-click, double-click, Ctrl+click, or coordinate-based clicks. Simulates a real mouse event at screen coordinates, so the target window must be visible and in the foreground.

send_keysA

Send keyboard input. Each action can be a pause (ms delay), text to type, or a virtual key code press/release. Simulates real OS-level key events sent to whatever window currently has keyboard focus — the target window must be focused, and this cannot target a specific element. Use for key combos (Ctrl+C, Alt+Tab), navigation keys, or typing into controls that have no addressable element.

hoverA

Move the mouse pointer from one position to another, optionally with modifier keys held. Useful for hover effects and drag-without-click.

scrollB

Scroll the mouse wheel at an element or screen coordinate.

perform_actionsA

Perform a raw W3C WebDriver Actions sequence (pointer/key/wheel input sources). Lower-level than advanced_click/hover/scroll/send_keys — use only when you need multi-source synchronized input (e.g. a key held down during a pointer drag) that those higher-level tools cannot express.

release_actionsA

Release all keys and pointer buttons currently held down by a prior perform_actions call. Call this to reset input state if a perform_actions sequence left keys/buttons stuck down (e.g. after an error mid-sequence).

click_and_dragC

Click and drag from one position to another. Useful for resizing, reordering, or moving elements.

invoke_elementA

Invoke the default action of an element via the UIA Invoke pattern without simulating mouse input. Use for elements that do not respond to mouse clicks.

expand_elementA

Expand a collapsible element (tree node, combo box, menu) via the UIA ExpandCollapse pattern.

collapse_elementB

Collapse an expanded element via the UIA ExpandCollapse pattern.

toggle_elementA

Toggle a checkbox or toggle button via the UIA Toggle pattern. To confirm the resulting state, call is_element_selected after this.

set_element_valueA

Set the value of an element via the UIA Value or RangeValue pattern (e.g. sliders, spin boxes).

get_element_valueB

Get the value of an element via the UIA Value pattern.

focus_elementA

Set focus to an element via the UIA Focus pattern (windows: setFocus). Required before keyboard-driven interactions such as send_keys on a specific control.

select_itemA

Select an item in a list box, tab control, or combo box via the UIA SelectionItem pattern (windows: select). Use when click does not trigger selection.

is_multi_selectA

Check whether a container (e.g. ListBox) allows multiple items to be selected via the UIA Selection pattern.

scroll_element_into_viewA

Scroll a container so the given element becomes visible, via the UIA ScrollItem pattern. Use before clicking an element that may be outside the visible scroll area.

get_selected_itemA

Get the first selected item in a container (e.g. ListBox, TreeView) via the UIA Selection pattern. Returns an element ID.

get_all_selected_itemsA

Get all currently selected items in a multi-select container via the UIA Selection pattern. Returns a JSON array of element IDs.

add_to_selectionA

Add an item to the current selection in a multi-select container via the UIA SelectionItem pattern (does not deselect existing items).

remove_from_selectionB

Remove an item from the current selection in a multi-select container via the UIA SelectionItem pattern.

get_window_elementA

Get the element ID of the current session's root window element.

launch_appA

Launch the application configured for this session (re-launch if it was closed).

close_appA

Close the application under test without ending the Appium session. Only call when explicitly asked.

attach_java_swingA

Inject the Java accessibility agent into the JVM owning the current session window. Use this after creating a session (with app or appTopLevelWindow) when javaSwing was NOT set at session creation time. Once called, element finding will use Java class names and accessible names instead of UIA.

attach_dotnet_bridgeA

Inject the .NET bridge into the CLR process owning the current session window. Use this after creating a session (with appTopLevelWindow) when dotnetBridge was NOT set at session creation time. Needed for WinForms/WPF apps built with custom-drawn control libraries (e.g. DevExpress) whose controls expose little or nothing via plain UIA. Only works on an already-running process — there is no launch-time injection path. Both .NET Framework (clr.dll) and CoreCLR (.NET 5+, coreclr.dll) targets are supported automatically.

get_device_timeA

Get the current date/time on the Windows device.

get_clipboardA

Read the current clipboard contents as a base64-encoded string.

set_clipboardB

Set the clipboard contents from a base64-encoded string.

analyze_screenA

Take a screenshot and return it to the calling agent for visual analysis. No external API key required. Includes a DPI-aware coordinate mapping so any coordinates identified are ready for click interactions.

find_by_visionA

Take a screenshot and delegate visual analysis to an external vision model, returning the result. Use when visual analysis should be performed by a separate model rather than by the calling agent. Requires an external API key: ANTHROPIC_API_KEY (claude-), OPENAI_API_KEY (gpt-/o-series), GEMINI_API_KEY (gemini-), or AWS_ACCESS_KEY_ID + AWS_SECRET_ACCESS_KEY (amazon.nova-).

get_current_contextA

Get the current active context. Returns "NATIVE_APP" (UIA element tree, find_element works here) or "WEBVIEW_" (web DOM, standard web selectors apply). Call this if unsure which context is active before interacting.

get_contextsA

List all available contexts. Returns "NATIVE_APP" for the UIA element tree, and any embedded webview contexts as "WEBVIEW_".

set_contextA

Switch the active context. Pass "NATIVE_APP" to return to the UIA element tree, or a "WEBVIEW_" from get_contexts to switch into an embedded webview.

get_native_childrenA

Fallback for legacy WinForms/ActiveX controls that expose zero UIA children (verify with get_page_source / Inspect.exe first). Bypasses UI Automation and walks the control's raw IAccessible (MSAA) tree instead — many of these controls were built with hand-written MSAA support for screen readers, exposing rows/cells as "simple children" (plain integer childIds with no HWND) that UIA and Win32 child-window enumeration can never see. Returns a tree of {name, role, value, description, state, defaultAction, rect, childCount, children}. If supported is false, or the root node has zero children, the control paints its own content with no accessibility tree either, and there is no structural data left to recover — use find_by_vision / analyze_screen plus advanced_click instead.

get_urlA

Get the current page URL. Only supported when the active window is an IE window (IE mode is enabled automatically by switch_to_window / switch_to_window_by_title when the target is an Internet Explorer window).

set_urlA

Navigate the current IE window to a URL. No keyboard shortcuts (Ctrl+L) needed and the window does not need to be in the foreground — this calls IHTMLWindow2.navigate directly through the IE COM bridge. Only supported when the active window is an IE window.

push_fileA

Write a file to the filesystem of the machine running the driver. Requires the "modify_fs" insecure feature to be enabled on the Appium server.

pull_fileA

Read a file from the filesystem of the machine running the driver, returned as base64. Requires the "modify_fs" insecure feature to be enabled on the Appium server.

delete_fileA

Delete a file on the machine running the driver. Requires the "modify_fs" insecure feature to be enabled on the Appium server.

delete_folderA

Delete a folder (recursively by default) on the machine running the driver. Requires the "modify_fs" insecure feature to be enabled on the Appium server.

start_recording_screenA

Start an FFmpeg-based screen recording. If a recording is already running it is stopped and restarted by default. Call stop_recording_screen to end it and retrieve the video.

stop_recording_screenB

Stop the current screen recording and return the video. Returns the video as base64 by default, or uploads it to a remote destination first if remotePath is provided.

get_orientationA

Get the current display orientation ("LANDSCAPE" or "PORTRAIT").

execute_powershellA

Run a raw PowerShell script or command on the machine running the driver, inside the session's persistent PowerShell process. Use for arbitrary automation not covered by another tool (registry edits, service control, file inspection, etc). Runs with the same privileges as the driver process — treat as unrestricted code execution.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

Latest Blog Posts

MCP directory API

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

curl -X GET 'https://glama.ai/api/mcp/v1/servers/verisoft-ai/windows2-mcp'

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