mcp-test-utils
Integrates with GitHub for binary distribution and configuration, allowing users to download and set up the MCP server for automated desktop testing with AI agents.
Hosts demonstration videos showing the MCP server's capabilities in action, providing visual examples of automated desktop testing workflows.
MCP Test Utils
MCP server for automated desktop UI testing. A single binary — no runtime, no dependencies, no installer.
Windows x64 only. There are no macOS or Linux builds yet. If you need one, write to JeenyJAI@gmail.com: requests decide what comes next.
Gives AI agents eyes and hands: screenshots, window management, mouse, keyboard, UI Automation, OCR, file search. Replays saved scenarios as regression runs — after every build, without an agent. Records what you do into a draft scenario, checks accessibility, watches the resources of the application under test.
Why
AI agents can trigger actions in applications but can't see the screen. This server bridges that gap:
Agent triggers action → takes screenshot → sees the result →
switches window → clicks a button → verifies → writes reportFully autonomous, no user involvement required.
Related MCP server: WinPilot Computer Use MCP
Demo
Setup
Download
mcp-test-utils.exefrom Releases (the.sigfile next to it is for the built-in updater — you do not need it).Add it to your MCP client:
Claude Desktop: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"test-utils": {
"command": "D:\\path\\to\\mcp-test-utils.exe"
}
}
}Claude Code:
claude mcp add test-utils -- "D:\path\to\mcp-test-utils.exe"For other clients, see their documentation.
Restart the client.
In chat, try: "Take a screenshot" — the agent will return an image of your desktop.
Optional settings (logging, file search, starting programs) go into env — see
Environment variables:
{
"mcpServers": {
"test-utils": {
"command": "D:\\path\\to\\mcp-test-utils.exe",
"env": {
"MCP_LOG_DIR": "D:\\path\\to\\logs",
"MCP_SEARCH_DIRS": "D:\\Projects\\app1;D:\\Projects\\app2",
"MCP_LAUNCH_APPS": "C:\\Program Files\\MyApp\\myapp.exe"
}
}
}
}Tools (31)
Four of them appear only when configured: search_in_files and find_files with MCP_SEARCH_DIRS,
enable_logging and disable_logging with MCP_LOG_DIR — by default the server lists 27 tools.
Vision
Tool | Description |
| Screenshot of the entire desktop; quality presets from full to minimal (fewer tokens) |
| Screenshot of a specific window |
| OCR the entire screen (Windows OCR) |
| OCR a screen region with precise word coordinates |
Window management
Tool | Description |
| List windows with id, title, app, process id, position, size, state |
| Bring a window to the front and restore it if minimized; optionally set its position and size |
| Start a program from the allowlist of the server config ( |
| Close a window as its X button would and wait until it is gone; reports a "Save changes?" prompt |
Input
Tool | Description |
| Click an element by id or at coordinates (left / right / middle, double); can wait for the expected effect and retry |
| Move the cursor to a point or to a UI element |
| Drag between elements or points at a human pace (HTML5 drag-and-drop works) |
| Scroll the mouse wheel over an element and wait until the scrolling stops |
| Type text (full Unicode — Latin, Cyrillic, CJK, emoji) and check that the field shows what was typed |
| Press a key (Enter, Tab, F1–F12, arrows, etc.), optionally several times |
| Press a key combination (Ctrl+S, Alt+F4, Ctrl+Shift+P, etc.) |
Structured UI access
Tool | Description |
| UI Automation tree — buttons, fields, menus with ids, values, states and exact coordinates; filters by name, value, class |
| Which element has keyboard focus now, and in which window |
| Full text of a document or field through UI Automation (up to 100 000 characters per call), no OCR |
| Act on an element without mouse or keyboard: invoke, toggle, expand, select an option, set a value, scroll into view |
| Accessibility defects: unnamed controls, controls the Tab key cannot reach, duplicate ids, zero-size controls |
Process
Tool | Description |
| Memory, handles, GDI objects, threads and CPU of the app under test — call it repeatedly to spot leaks |
Waiting, batching and scenarios
Tool | Description |
| Wait for a window, an element or its state instead of sleeping |
| Run up to 20 tool calls in one request, with |
| Replay a saved scenario, a suite or data rows and get a pass/fail report (see Regression runs) |
| Record what you do in one window into a draft scenario (see Recording) |
File search
Tool | Description |
| Search text or regex in files within allowed directories (like VS Code Find in Files) |
| Find files and directories by name pattern (glob), like "Go to File" |
Agent guide
Tool | Description |
| Usage guide for agents: core rules + sections on request |
| Prepare a suggestions file for the author (personal data masked; you review it and send it by email — nothing is sent automatically) |
Session logging
Tool | Description |
| Start recording tool calls to JSONL + screenshots (opt-in) |
| Stop recording, get session stats |
Regression runs without an agent
An agent finds a path through your application once and saves it as a scenario — a JSON file. After that the scenario replays without an agent: fast, the same way every time, no tokens spent.
mcp-test-utils --check order-form.json # validate the file, touch nothing
mcp-test-utils --run order-form.json # run: report in the console and in order-form.report.jsonExit codes:
0— passed,1— a step failed,2— did not run. Ready for a CI job after each build.On a failure you get a screenshot, the element tree and a hint: either the scenario is stale or the application has changed.
An agent runs a scenario with
run_scenario(path)and learns the format fromget_usage_guide(section: "scenarios").Suites and data rows:
--suiteruns several scenario files in order with one summary;--data rows.csvruns a scenario once per row (columns become variables);--junit report.xmladds JUnit XML for CI.mcp-test-utils --suite regress.suite.json --junit regress.xmlWithout a license key a scenario runs up to 50 steps (see License key).
Recording
Do the steps yourself and get a draft scenario instead of describing them to an agent:
mcp-test-utils --record order-form.json --app myappOnly that window and its dialogs are recorded, with a notice on screen; Ctrl+Alt+Shift+R (or Enter in the
console) stops the recording. Password fields are never read; text typed into a terminal is recorded only with --keys-text. An
agent can start the same recording with record_scenario.
Environment variables
Variable | Description | Default |
| Path for log sessions. Without it, logging tools are hidden | — |
| Session size limit (warning when exceeded) |
|
| Auto-delete sessions older than N days. |
|
| Allowed directories for | — |
| Programs ( | — |
|
| — |
|
| — |
| Server silence (ms) after which the lock releases your input |
|
Tray icon, updates and input lock
A tray icon shows a live log of tool calls, one tab per session, errors in red;
MCP_NOTIFY=offhides it.Updates: tray menu → Check for updates…. Only a release signed by the author is installed; afterwards restart your MCP client. The server goes online only when you click.
Input lock: while the server types or clicks, your keyboard and mouse buttons are paused (the pointer still moves). Press Esc to stop the action and get your input back.
MCP_INPUT_LOCK=offturns the lock off.
Feedback
If an agent hits a gap in the tools, it offers to prepare a short suggestions file (prepare_feedback). The file
goes to Documents\mcp-test-utils feedback\, with personal data masked and no screenshots; review it and email it
to JeenyJAI@gmail.com. Nothing is sent automatically.
Use cases
Automated QA — the agent navigates the app, clicks through flows, takes screenshots at each step, writes a test report
Regression runs — replay saved scenarios after each build, from a script or a CI job, without an agent
Recorded tests — walk through a path yourself once, get a draft scenario, let the agent turn it into a test
Desktop automation — fill forms, copy data between windows, run workflows
Accessibility audit —
check_accessibilityfinds unnamed controls, controls the Tab key cannot reach, duplicate idsResource leaks —
process_infoshows handles and GDI objects growing across repeated callsVisual checks — the agent compares screenshots between builds
Data extraction — read document text through UI Automation, or OCR text from applications that don't expose it
Code search — find patterns across multiple projects without leaving the agent session
Security
Responds only to requests from the MCP client; opens no network ports
Writes files only when you ask: logs, scenario reports and JUnit files, recorded drafts, sealed scenarios, the feedback file, the license file — plus small settings files in
%LOCALAPPDATA%\mcp-test-utils\and an update you installSends no data externally; goes online only when you click Check for updates (and Download and install) in the tray window — an agent's tool call never does, and only a file signed by the author is installed
Holds your keyboard and mouse buttons only during a call,
batchor scenario run that sends input — Esc releases them at onceStarts only the programs you list in
MCP_LAUNCH_APPS(never shells or interpreters); a forcedclose_windowterminates only a program it startedRecords only on an explicit command, with a notice on screen the whole time; password fields are never read
Screenshots capture the entire screen — make sure no sensitive information is visible
File search is sandboxed — only directories in
MCP_SEARCH_DIRSare accessible
How it works
MCP Test Utils is an MCP server over stdin/stdout: your MCP client starts the exe and calls its tools. It uses native Windows APIs (UI Automation, Win32 input, Windows OCR) — no PowerShell, no helper tools, no network access except the update check you start. Tested with Claude Desktop and Claude Code.
License key
All tools are free. A license key only lifts the 50-step limit of scenario runs.
For now, keys are issued through early access: the first 30 users get a free one-year key in exchange for short
feedback after the first month — write to JeenyJAI@gmail.com with your email and the
machine code of your computer. A key is bound to that computer. Your agent sees the code in the second line of
get_usage_guide, or print it yourself:
mcp-test-utils --machine-idRegister the key once on that computer:
mcp-test-utils --set-license <email> <key>Reinstalling Windows or replacing the motherboard alone keeps the key valid; a new computer needs a new key — just write again.
A sealed scenario runs anywhere without the limit — that file only, exactly as sealed. On the licensed computer
mcp-test-utils --seal order-form.json writes a seal into the file; a CI agent or a colleague without a key then
runs it in full. Any change to its steps (or to the files it includes) breaks the seal — seal it again on the
licensed computer.
Support us
If you find it useful — jeenyjai.github.io
License
Copyright 2026 JeenyJAI. All rights reserved.
🚀 Created with Claude
This server cannot be deployed
Maintenance
Related MCP Connectors
Pay-per-use agent tools: screenshots, web to Markdown, PDF tables, OCR, UK company checks
PDF, image, video, OCR, screenshot, SQL, QR and text tools for agents. No API key, no signup.
Eyes and hands on real Windows PCs — observe, click, type via Glasswarp API.
Control a real browser from AI agents: navigate, click, type, screenshot, read the page.
Related MCP Servers
- AlicenseAqualityAmaintenanceWindows desktop automation MCP server — screenshot, mouse, keyboard & UI Automation. Lets LLM agents see and control your Windows desktop directly.30301 npm22MIT
- FlicenseNot gradedqualityDmaintenanceEnables AI agents to control Windows GUI applications like a human using screen capture, OCR, mouse and keyboard input, and window management, with safety levels and memory.-
- AlicenseNot gradedqualityAmaintenanceEnables AI assistants to autonomously control Windows 11 and 10 desktops via sub-10ms screen capture, native UI Automation element inspection, and zero-lag keyboard and mouse input. Combines a visual plane with a semantic plane and stall detection so agents can operate real applications reliably without vision-only guessing.0278 PyPI5MIT
- AlicenseNot gradedqualityAmaintenanceEnables AI clients to see and control a Windows desktop through screenshots, built-in OCR, mouse and keyboard input, and accessibility trees read via UI Automation, MSAA and Chrome DevTools Protocol. It also manages windows, virtual desktops and element-level actions such as invoking controls or setting values, running on Node.js with the PowerShell that ships with Windows.5Apache 2.0