{"name":"io.github.A9T9/uivision-mcp","slug":"a9t9-uivision-mcp","title":"Ui.Vision MCP","description":"MCP server for browser and desktop automation: OCR, image recognition, real mouse and keyboard input","url":"https://mcp.market/server/a9t9-uivision-mcp","rating":null,"grade":"B","score":74,"certified":false,"status":"active","category":"scraping","tags":["scraping","media"],"presence":{"score":61,"stars":2076,"forks":419,"downloads_week":142,"last_push_at":"2026-10-13T10:07:19.000Z","license":"NOASSERTION"},"uptime":null,"claimed":false,"transport":"npm","callable_via_gateway":false,"default_price_micros":0,"repository":"https://github.com/A9T9/RPA","website":"https://ui.vision/mcp","version":"1.7.18","remotes":[],"packages":[{"registryType":"npm","registryBaseUrl":"https://registry.npmjs.org","identifier":"uivision-mcp-bridge","version":"1.7.18","runtimeHint":"npx","transport":{"type":"stdio"},"environmentVariables":[{"description":"Local WebSocket port the Ui.Vision extension connects to (default 50888; must match Settings > AI in the extension)","format":"number","name":"UIVISION_MCP_PORT"}]}],"tools":[{"name":"bridge_status","description":"Reports whether the Ui.Vision browser extension is currently connected to this bridge. Call this first if other tools fail — it tells you whether the extension side panel is open and the bridge is enabled in its settings. Several browsers can be connected at once; the status lists each one by label (chrome#1, firefox#1, ...) and marks the ACTIVE one that tool calls go to.","write_action":false,"price_micros":0,"input_schema":null},{"name":"browser_snapshot","description":"Returns the structure of the browser tab Ui.Vision plays in. Default mode \"tree\": the page as an accessibility tree — one line per node with role, accessible name and state (value, checked, expanded, disabled, offscreen), nested by container. Every interactive node carries [ref=N], and ref=N is a LOCATOR: act on it right away with uiv.page.click('ref=12'), uiv.page.fill('ref=7', text) or uiv.$('re","write_action":false,"price_micros":0,"input_schema":null},{"name":"click_at","description":"EXPLORATION ONLY: click the point (x, y) read off the MOST RECENT screenshot — the extension converts the picture's pixels to the page or screen itself, so \"click the thing in the picture\" is one call. A browser screenshot clicks in the tab (trusted click, any frame); a desktop screenshot clicks on the screen through the XModule. Returns what changed on the page afterwards (like run_macro look: \"d","write_action":false,"price_micros":0,"input_schema":null},{"name":"create_macro","description":"Create a NEW macro from the given Ui.Vision JSON and save it in the \"AI Generated\" folder under a new, unique name. PREFER the JS script form {\"Name\": \"...\", \"Script\": \"<JavaScript using the uiv.* API>\"} over the classic Commands table — scripts are modern JS with real control flow and are the recommended way to build macros. Call get_authoring_guide for the uiv.* API before writing your first scr","write_action":true,"price_micros":0,"input_schema":null},{"name":"delete_macro","description":"Delete a macro from the \"AI Generated\" folder — cleanup for scratch and test macros this or an earlier session created there. Only macros inside \"AI Generated\" can be deleted; everything else is refused (the user deletes those in the panel). Returns a confirmation.","write_action":true,"price_micros":0,"input_schema":null},{"name":"get_ai_settings","description":"Reports the ACTIVE AI provider/model as the chat will resolve it, which providers have keys stored (booleans only — keys never cross the bridge), the per-provider model settings, computer-vision scope and OCR engine. Call before set_ai_settings to plan a change.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_authoring_guide","description":"Returns the Ui.Vision macro authoring guide: the uiv.* JavaScript API for JS script macros (finders, actions, OCR, vision), the classic command table, locator rules and best practices. CALL THIS ONCE BEFORE WRITING YOUR FIRST MACRO in a session — macros written without it usually use invented APIs and fail.","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_chat","description":"Returns the in-panel AI Chat transcript and whether a run is in progress (running:true/false). Poll this after send_chat; the transcript is text-only (inline images are omitted).","write_action":false,"price_micros":0,"input_schema":null},{"name":"get_macro","description":"Returns the macro currently loaded in the Ui.Vision editor, as Ui.Vision JSON. A JS script macro comes back with a \"Script\" field (its program) instead of Commands.","write_action":false,"price_micros":0,"input_schema":null},{"name":"list_macros","description":"Lists all macros stored in Ui.Vision (name and id). Use open_macro to load one into the editor before reading or running it.","write_action":false,"price_micros":0,"input_schema":null},{"name":"open_macro","description":"Opens the macro with the given name in the Ui.Vision editor and returns its JSON. Subsequent get_macro/set_macro/run_macro calls operate on it. Note: unsaved editor changes may be discarded.","write_action":false,"price_micros":0,"input_schema":null},{"name":"open_panel","description":"Opens the Ui.Vision panel when the extension is NOT connected: signals the browser over a background wake channel (extension 10.0.170+) to open the Ui.Vision app in a tab. This is the ONLY way the panel opens without a human click — the extension never opens it by itself. Works when the panel or its tab was closed, and even when the browser sits in the tray with zero windows (a window is created).","write_action":false,"price_micros":0,"input_schema":null},{"name":"reload_extension","description":"Reloads the Ui.Vision extension from disk (same as the chrome://extensions reload button) — the way to load a freshly built version without a human click. The bridge connection dies with the panel; on startup the panel app reopens as a TAB and reconnects, and the new hello reports the loaded version. If no reconnect arrives within ~15s the new build failed to start and needs a human at chrome://ex","write_action":false,"price_micros":0,"input_schema":null},{"name":"run_macro","description":"Run a macro against the browser tab and wait for it to finish (can take minutes). Three forms: pass \"macro\" (a name from list_macros) to open and run that stored macro; pass \"script\" (inline JavaScript) to run code directly without creating a macro; pass neither to run whatever is currently open in the editor — that last form depends on editor state, so prefer naming the target. Returns the execut","write_action":true,"price_micros":0,"input_schema":null},{"name":"run_selftest","description":"Runs every self-test of Settings > Desktop Automation in one go: native host connection, WASM image-search engine, desktop screenshot, real mouse input delivery, home-directory read/write, visual compatibility (colors, scaling, screenshot coordinates) and a test macro inside the desktop app - and returns ONE report that starts with \"SELFTEST: ALL OK\" or \"SELFTEST: PROBLEMS FOUND\", then one line pe","write_action":true,"price_micros":0,"input_schema":null},{"name":"run_status","description":"What the macro runner is doing RIGHT NOW: whether a run is in progress, which macro the editor holds, and the freshest log lines. Unlike every other tool, this ANSWERS WHILE run_macro is still executing (extension 10.0.172+) — poll it from a second client/session to watch a long run live instead of waiting blind. screenshot is likewise answerable mid-run for a visual peek.","write_action":true,"price_micros":0,"input_schema":null},{"name":"save_element_image","description":"Crop a rectangle from the MOST RECENT screenshot and save it as a Ui.Vision vision image, for image-based commands like \"XClick | Target: <name>.png\" or uiv.findImage('<name>.png') in a JS script. Coordinates are absolute pixels in the last screenshot (or in the last magnified view, which converts back itself — never scale by hand).","write_action":false,"price_micros":0,"input_schema":null},{"name":"save_relative_image","description":"Create a green/pink RELATIVE vision image from the MOST RECENT screenshot, for commands like \"BClickRelative | Target: <name>.png\". The green box marks the anchor element that is searched on the page; the pink box marks where to click, relative to the anchor. Coordinates are absolute pixels in the last screenshot.","write_action":true,"price_micros":0,"input_schema":null},{"name":"screenshot","description":"Returns a screenshot of the visible part of the browser tab Ui.Vision plays in. Coordinates passed to save_element_image / save_relative_image are absolute pixels in this image.","write_action":false,"price_micros":0,"input_schema":null},{"name":"select_browser","description":"Switches which connected browser the other tools talk to. Several browsers (or several instances of one browser) can hold a bridge connection at the same time; bridge_status lists their labels. Pass a full label (\"chrome#2\") for an exact instance, or a bare family name (\"firefox\") for the most recently connected instance of that family.","write_action":false,"price_micros":0,"input_schema":null},{"name":"send_chat","description":"Sends a message to the REAL in-panel AI Chat — the configured chat model runs it with its own agent tools, exactly as if a user had typed it. Returns immediately; a chat run takes minutes, so poll get_chat until it reports running:false. For self-testing the chat agent end-to-end.","write_action":true,"price_micros":0,"input_schema":null},{"name":"set_ai_settings","description":"Switches AI settings for independent runs (e.g. benchmark sweeps): provider (uivision | openrouter | anthropic | local), uivision_tier (free | pro), openrouter_model / anthropic_model / local_model / local_base_url, cv_scope (browser | desktop), ocr_engine (1|2|3 OCR.Space, 90 AI provider, 98 built-in cross-platform, 99 OS reader). Only switches between providers the user already configured — API ","write_action":false,"price_micros":0,"input_schema":null},{"name":"set_macro","description":"Apply changes to the macro in the Ui.Vision editor — pass the complete Ui.Vision JSON. PREFER the JS script form {\"Name\": \"name\", \"Script\": \"<JavaScript using the uiv.* API>\"} over the classic Commands table (call get_authoring_guide for the uiv.* API before writing your first script). When fixing or extending a classic Commands-table macro, CONVERT it to a JS script in the same call and fix it th","write_action":false,"price_micros":0,"input_schema":null},{"name":"type_at","description":"EXPLORATION ONLY: click the point (x, y) of the MOST RECENT screenshot and type text there (key names like …, …, … are honoured). Same conversion and same caveat as click_at. Returns what changed on the page afterwards.","write_action":false,"price_micros":0,"input_schema":null}],"scan":{"score":74,"grade":"B","scanned_at":"2026-10-15T12:00:22.537Z","report":{"scannerVersion":"0.1.10","scannedAt":"2026-10-15T12:00:22.509Z","components":{"code":{"score":13,"max":25,"notes":["2 source files scanned"]},"reliability":{"score":-1,"max":20,"notes":["no gateway calls yet and no remote to probe"]},"poisoning":{"score":-1,"max":15,"notes":["tools not inspected (local package is not executed); not counted"]},"auth":{"score":12,"max":15,"notes":["local package, no credentials required"]},"maintenance":{"score":15,"max":15,"notes":["last push 2 days ago"]},"identity":{"score":8,"max":10,"notes":["registry namespace matches repository owner","GitHub account older than a year"]}},"findings":[{"id":"exec.shell-concat","severity":"high","component":"code","title":"Shell command built from a string (injection risk)","evidence":"uivision-mcp-bridge.js: …$x.ParentProcessId }` const out = execSync(`powershell -NoProfile -NonInteractive -Command \"${script.replace(/\"/g, '\\\\\"')}\"`, { encodi…"}],"inputs":{"packages":[{"registryType":"npm","identifier":"uivision-mcp-bridge","version":"1.7.18","found":true,"license":"MIT","hasInstallScripts":false,"dependencyCount":1,"publishedAt":"2026-09-17T13:38:34.961Z","repositoryUrl":"git+https://github.com/A9T9/RPA.git","weeklyDownloads":142}],"repo":{"found":true,"owner":"A9T9","repo":"RPA","archived":false,"pushedAt":"2026-10-13T10:07:19Z","stars":2076,"forks":419,"openIssues":7,"ownerType":"User","ownerAvatarUrl":"https://avatars.githubusercontent.com/u/9657938?v=4","ownerCreatedAt":"2014-11-10T14:57:07Z","license":"NOASSERTION"},"icon":{"url":"https://ui.vision/content/images/ui.vision.favicon32.webp","source":"site"},"presence":{"stars":2076,"forks":419,"downloadsWeek":142,"license":"NOASSERTION","lastPushAt":"2026-10-13T10:07:19.000Z","score":61}}}},"grade_history":[{"kind":"restore","fromGrade":"C","toGrade":"B","reason":"score 74: Shell command built from a string (injection risk)","createdAt":"2026-10-15T12:00:23.040Z"}],"reviews":[]}