Skip to content
Agentmart
Submit a tool

Oswright

Windows desktop automation that re-reads only what changed: 7x fewer tokens per task.

Connector by Ask-812 · GitHub account verified by the MCP Registry

IndexedMITLocal (stdio)★ 4
Write a review

Chalk Labs

Need help deploying Oswright?

Chalk Labs sets up agents like this inside real teams: connected to your tools, tested on your data, with a human in the loop where it matters.

Book a call

Install

Works with Claude Code, Codex, VS Code, Cursor, Windsurf, Claude Desktop. Read the repository before you give any tool access to your data.

npx agentmarket install connector/ask-812-oswright

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

Windows desktop automation that re-reads only what changed: 7x fewer tokens per task.

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this server can do and what it asks for, from its tool list, install config and code. Checked Oct 26, 2026.

Tools
17 read · 21 write · 1 delete · 4 not yet classified
Secrets
None asked for
Install scripts
None found
Runs as
Python package

Tools by what they do 43

Read from the source code; the running server may list different tools.

Read 17 · Look things up without changing anything.

  • atlas_stats
  • find_element
  • find_image_on_screen
  • find_text_on_screen
  • get_active_window
  • get_clipboard
  • get_mouse_position
  • get_ocr_info
  • get_screen_info
  • get_ui_tree
  • list_windows
  • perception_stats
Show 5 more tools
  • read_model_text
  • read_screen_text
  • screenshot
  • screenshot_window
  • wait_for_change

Write 21 · Create, change, send or run things.

  • click_element
  • click_text
  • click_ui_element
  • close_window
  • double_click_text
  • fill_field
  • fill_form
  • fill_ui_element
  • hover_text
  • mouse_click
  • mouse_double_click
  • mouse_drag
Show 9 more tools
  • mouse_move
  • mouse_scroll
  • press_key
  • right_click_text
  • set_clipboard
  • type_text
  • wait_for_text
  • wait_for_text_gone
  • wait_for_time

Delete 1 · Delete, drop, revoke or wipe things.

  • launch_app

Not yet classified 4 · We could not tell from the name and description.

  • focus_window
  • minimize_window
  • observe
  • remember_screen

Network hosts it talks to 1

  • github.com · found in code

Files it touches

  • Your home directory (~)
  • C:\\Windows\\notepad.exe
  • C:\\Windows\\System32\\notepad.exe

Tools (43)

Read from the source code; the running server may differ. Descriptions are the server’s own words; hidden characters are shown as [U+…].

  • atlas_stats

    Report what the screen atlas has remembered and how often it helped.

  • click_element

    Find on-screen text via the resolution cascade and click it. The cheaper alternative to click_text: it reuses what is already known about the screen instead of running OCR over the whole display on every call. Args: text: The visible text to find and click. exact: Require the label to equal `text` rather than contain it. button: Mouse button. window_title: Restrict accessibility lookups to one window.

  • click_text

    Find text on screen using OCR and click on it. Auto-retries until found or timeout. Returns action result and a screenshot of current screen state. Args: text: The visible text to find and click. exact: Require exact text match (not just substring). button: Mouse button ('left', 'right', 'middle'). timeout: Maximum seconds to wait for the text to appear. Defaults to the server's --timeout setting. poll_interval: Seconds between each retry. monitor: Monitor index.

  • click_ui_element

    Click a UI element using the accessibility tree (Windows only). More reliable than OCR — finds elements deterministically by their role and name. Args: name: Element name/label (substring match). E.g., "Save", "OK", "File". control_type: Element type: Button, Edit, CheckBox, MenuItem, etc. automation_id: Element automation ID (exact match, if known from get_ui_tree). window_title: Target a specific window.

  • close_window

    Close a window by its title (substring match). Sends WM_CLOSE. This may discard unsaved work in the target application. Returns action result and a screenshot. Args: title: Window title substring to find and close.

  • double_click_text

    Find text on screen using OCR and double-click on it. Returns action result and a screenshot of current screen state. Args: text: The visible text to find and double-click. exact: Require exact text match. timeout: Maximum seconds to wait for the text to appear. poll_interval: Seconds between each retry. monitor: Monitor index.

  • fill_field

    Find a text label on screen, click it, clear the field, and type a value. Useful for filling form fields by their label text. Returns action result and a screenshot of current screen state. Args: target_text: The label text to find and click. value: The text to type into the field. exact: Require exact text match for the label. timeout: Maximum seconds to wait for the label. monitor: Monitor index.

  • fill_form

    Fill multiple form fields in one call. Each field is identified by its label text and filled with the given value. Reduces round-trips for forms. Returns action result and a screenshot of current screen state. Args: fields: List of dicts with 'label' and 'value' keys. Example: [{"label": "Username", "value": "admin"}, {"label": "Password", "value": "secret"}] timeout: Maximum seconds to wait for each label. monitor: Monitor index.

  • fill_ui_element

    Set the value of a UI element (e.g., type text into a text box) using the accessibility tree (Windows only). More reliable than OCR-based fill. Args: value: Text to enter. name: Element name/label to find. automation_id: Automation ID of the element. window_title: Target a specific window.

  • find_element

    Find on-screen text using the cheapest method that can answer. Tries, in order: the existing screen model (free), an incremental rescan of changed regions, the accessibility tree, the application's own text buffer, and finally a full screen read. Returns coordinates ready for mouse_click, plus which rung answered. Args: text: The visible text to find. exact: Require the label to equal `text` rather than contain it. window_title: Restrict accessibility lookups to one window.

  • find_image_on_screen

    Find all occurrences of a template image on screen. Coordinates are absolute screen coordinates, ready to pass to mouse_click. Args: template_path: Absolute path to the template image file to find. threshold: Minimum match confidence (0.0-1.0, default 0.8). monitor: Monitor index.

  • find_text_on_screen

    Find all occurrences of text on screen using OCR. Returns a list of matches with coordinates and confidence. Coordinates are absolute screen coordinates, ready to pass straight to mouse_click. Args: text: The text to search for on screen. exact: If True, requires exact match. If False, substring match. region_left: Optional left bound to restrict search area. region_top: Optional top bound to restrict search area. region_width: Optional width to restrict search area. region_height: Optional height to restrict search area. monitor: Monitor index.

  • focus_window

    Bring a window to the foreground by its title (substring match). Returns the focused window info and a screenshot. Args: title: Window title substring to find and focus.

  • get_active_window

    Get information about the currently active/focused window. Returns the window title, position, size, and process name.

  • get_clipboard

    Get the current text content of the system clipboard. Returns the clipboard text or null if empty.

Show 28 more tools
  • get_mouse_position

    Get the current mouse cursor position.

  • get_ocr_info

    Get information about the active OCR backend and available backends. Useful for debugging OCR issues.

  • get_screen_info

    Get screen dimensions and monitor count. Args: monitor: Monitor index (0 = all monitors combined).

  • get_ui_tree

    Get the accessibility tree of the focused window (or a specific window). Returns all interactive UI elements with their names, types, and positions. This is deterministic and instant — much more reliable than OCR for apps with proper accessibility support (most modern Windows apps). Windows only. Falls back gracefully on Linux/macOS. Args: window_title: Optional window title to inspect (default: focused window). max_depth: How deep to walk the UI tree (default: 8).

  • hover_text

    Find text on screen using OCR and move the mouse over it (hover). Useful for triggering tooltips, hover menus, or inspecting elements. Returns action result and a screenshot of current screen state. Args: text: The visible text to find and hover over. exact: Require exact text match. timeout: Maximum seconds to wait for the text to appear. poll_interval: Seconds between each retry. monitor: Monitor index.

  • launch_appcan change or delete data

    Launch an application. Optionally wait for specific text to appear on screen (indicating the app has loaded). Returns a screenshot after launch. The command is executed directly, never through a shell, so shell syntax (pipes, redirection, chaining) is not interpreted and not available. Args: command: Application name or full path (e.g. 'notepad', 'calc', r'C:\Windows\System32\notepad.exe'). args: Optional argument list. Prefer this over embedding arguments in `command`, since it needs no quoting at all. wait_text: Optional text to wait for after launch (e.g…

  • list_windows

    List all visible windows on the desktop. Optionally filter by title substring. Returns window titles, positions, sizes, and process names. Args: title_filter: Optional substring to filter window titles (case-insensitive).

  • minimize_window

    Minimize a window by its title (substring match). Returns action result and a screenshot. Args: title: Window title substring to find and minimize.

  • mouse_click

    Click the mouse at coordinates or current position. Returns action result and a screenshot of current screen state. Args: x: X screen coordinate. If not provided, clicks at current position. y: Y screen coordinate. If not provided, clicks at current position. button: Mouse button - 'left', 'right', or 'middle'. clicks: Number of clicks (2 for double-click).

  • mouse_double_click

    Double-click at coordinates or current position. Returns action result and a screenshot of current screen state. Args: x: X screen coordinate. y: Y screen coordinate.

  • mouse_drag

    Drag from one point to another. Returns action result and a screenshot of current screen state. Args: start_x: Starting X coordinate. start_y: Starting Y coordinate. end_x: Ending X coordinate. end_y: Ending Y coordinate. button: Mouse button to hold ('left' or 'right'). duration: Duration of the drag in seconds.

  • mouse_move

    Move the mouse cursor to screen coordinates. Args: x: X screen coordinate. y: Y screen coordinate.

  • mouse_scroll

    Scroll the mouse wheel. Returns action result and a screenshot of current screen state. Args: amount: Scroll amount. Positive = up, negative = down. x: Optional X coordinate to scroll at. y: Optional Y coordinate to scroll at.

  • observe

    Report what changed on screen since the last observation. Prefer this over `screenshot` for tracking state. It maintains a running model of on-screen text and rescans only the regions that actually moved, so it costs a fraction of a full screen read and returns tens of tokens instead of thousands. The first call on an unfamiliar screen reads everything. If the screen has been seen before it is recognised and reused instead, after spot-checking that it really is the same screen. Args: force_full: Rescan the entire screen instead of only what changed. Use if you suspect th…

  • perception_stats

    Report how much perception work has been avoided. Covers incremental scanning, remembered screens, and predicted actions.

  • press_key

    Press a key or key combination. Returns action result and a screenshot of current screen state. Supports single keys and combos like 'Enter', 'Ctrl+C', 'Alt+Tab', 'Ctrl+Shift+S'. Args: key: Key name or combo (e.g., 'Enter', 'Ctrl+A', 'Alt+F4').

  • read_model_text

    Read on-screen text from the incremental model. Unlike read_screen_text this does not re-OCR the display; it refreshes only the regions that changed and then answers from the model. Args: query: Optional substring filter. limit: Maximum elements to return.

  • read_screen_text

    Read ALL visible text on the screen using OCR. Returns every detected text element with its position, in absolute screen coordinates that are ready to click. Args: region_left: Optional left bound to restrict OCR area. region_top: Optional top bound to restrict OCR area. region_width: Optional width to restrict OCR area. region_height: Optional height to restrict OCR area. monitor: Monitor index.

  • remember_screen

    Remember the current screen so future visits skip reading it. Useful after arriving at a screen you expect to return to, such as a settings page or a dialog. Remembered screens persist across sessions and are always spot-checked before being reused.

  • right_click_text

    Find text on screen using OCR and right-click on it (context menu). Returns action result and a screenshot of current screen state. Args: text: The visible text to find and right-click. exact: Require exact text match. timeout: Maximum seconds to wait for the text to appear. poll_interval: Seconds between each retry. monitor: Monitor index.

  • screenshot

    Take a screenshot of the screen or a region. Returns the image as native MCP image content. Optionally saves to a file path. Args: save_path: Optional file path to save the screenshot. region_left: Left coordinate for a sub-region capture. region_top: Top coordinate for a sub-region capture. region_width: Width of the sub-region. region_height: Height of the sub-region. monitor: Monitor index (0 = all monitors, 1 = primary, etc.).

  • screenshot_window

    Take a screenshot of a specific window (by title). Useful for capturing just one application without the rest of the desktop. Returns the image as native MCP image content. Args: title: Window title substring to capture. save_path: Optional file path to save the screenshot.

  • set_clipboard

    Set text to the system clipboard. Useful for pasting data into applications. Args: text: The text to copy to the clipboard.

  • type_text

    Type text using the keyboard (character by character). Returns action result and a screenshot of current screen state. Args: text: The text to type. delay: Delay in seconds between each character.

  • wait_for_changeread-only

    Wait for the screen to visually change. Takes a baseline screenshot, then polls until the screen looks different (or timeout). Useful after triggering an action to wait for the UI to update. Args: timeout: Maximum seconds to wait for a change. poll_interval: Seconds between polls.

  • wait_for_text

    Wait for specific text to appear on screen. Polls via OCR until found or timeout. Args: text: The text to wait for. exact: Require exact match. timeout: Maximum seconds to wait. Defaults to the server's --timeout. poll_interval: Seconds between polls. monitor: Monitor index.

  • wait_for_text_gone

    Wait for text to disappear from screen. Polls via OCR until gone or timeout. Useful for waiting for loading spinners, progress dialogs, etc. to finish. Args: text: The text to wait to disappear. exact: Require exact match. timeout: Maximum seconds to wait. Defaults to the server's --timeout. poll_interval: Seconds between polls. monitor: Monitor index.

  • wait_for_time

    Wait for a specified amount of time, then take a screenshot. Use sparingly — prefer wait_for_text or wait_for_text_gone instead. Capped at 30 seconds maximum. Args: seconds: Number of seconds to wait (max 30).

Signals

Stars
4
Forks
1
Open issues
0
Weekly downloads
34
Last commit
Oct 16, 2026 (18 days ago)
Last release
Sep 17, 2026 (1 month ago)
Last package publish
Sep 17, 2026 (1 month ago)

From GitHub (fetched Oct 24, 2026) and the package registry.

Details

Registry name
io.github.Ask-812/oswright
Version
0.8.2
Auth
No auth
Packages
pypi oswright
License
MIT
First seen
Oct 24, 2026
Last checked
Nov 1, 2026

Done for you

Rather not set it up yourself?

Chalk Labs scopes, builds and runs agents for your team: the task audit, the eval harness, the integrations and the weekly ops report. Fixed scope, priced before we start.

See how we build AI agents →Read the case studies

Chalk Labs is a two-founder AI and growth studio. We build AI agents, CRMs and MVPs for Web3 and AI companies, and have shipped 50+ product and token launches.

launches shipped
50+
launches shipped
media placements
500+
media placements
founders on every account
2
founders on every account

Press we've placed: Forbes · CoinDesk · Decrypt · Cointelegraph · The Block

Rahil Jain, Co-founder, Chalk Labs. Ex-Goldman Sachs engineer. You talk to the person who builds it.

Get Oswright running in your business

Tell us what you want to automate. A founder replies within one working day with a plan, not a pitch deck.

Goes to the Chalk Labs founders, not the newsletter. Privacy

Need help deploying Oswright?

CallGet help
Cite this page

Oswright MCP server. Agent Mart. https://agentmart.dev/connectors/ask-812-oswright (last updated 2026-11-01)