Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
作者提供的说明(英文原文)
Desktop UI automation for AI agents: verified clicks, UI Automation, OCR, scenario runs, recording
这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。
我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。
选择你使用的 AI 应用,然后复制设置。
MCP_LOG_DIR, MCP_LOG_MAX_MB, MCP_LOG_RETAIN_DAYS, MCP_SEARCH_DIRS, MCP_LAUNCH_APPS, MCP_NOTIFY, MCP_INPUT_LOCK, MCP_INPUT_LOCK_STALL_MS你用的是哪个应用?
在上方选择你的应用。我们会记住它,下次按钮会显示“安装到 …”。
链接指向作者自己的文件;我们不托管也不重新打包它。打开文件后,Claude Desktop 会进行安装。
在终端中运行这条命令
运行前请先填写空着的值。
浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
这个服务器在你的电脑上运行,而 ChatGPT 只能连接互联网上的服务器。请选择其他应用。
你的选择通过 Cookie 保存在这台设备上,无需账户。
MCP_LOG_DIR envMCP_LOG_MAX_MB envMCP_LOG_RETAIN_DAYS envMCP_SEARCH_DIRS envMCP_LAUNCH_APPS envMCP_NOTIFY envMCP_INPUT_LOCK envMCP_INPUT_LOCK_STALL_MS env这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。
它在你的电脑上运行;安装后,工具列表会显示在你的 AI 应用中。
我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月8日
注册名称已通过 GitHub 账户 JeenyJAI 验证,该账户拥有此仓库
我们还没有从 GitHub 读取这个仓库
我们还没有从 GitHub 读取这个仓库
它在你的电脑上运行,没有互联网端点
在你的电脑上运行,改用本地设置
它在你的电脑上运行;我们只能读取互联网端点的工具列表
与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。
它在 1 项适用的基础检查中通过了 1 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。
注册中心没有列出必需的密钥,不过有些服务器会在首次使用时要求你登录。
它在你的电脑上运行。你的 AI 应用会在需要时启动它,数据不会经过作者的服务器(除非它自己调用在线服务)。
GitHub 仓库最后更新于–,最新版本(3.27.23)于20天前进入注册中心。
支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。你的电脑上还需要有 MCPB。
同一分类中有:Spec Driven Development, Remote Desktop Commander, alalanet — check before you pay
同一分类中其他作者的服务器,按星标数排序。
如何看卡片:↓ 每周下载量i★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Check packages, MCP servers and x402 endpoints before agents install or pay. Signed.
按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。
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.
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 report
Fully autonomous, no user involvement required.
3.26 — Scenario run
Claude replays a saved test: 232 steps, one call, 66 s
Installation and setup
Setting up the server and the basic tools
mcp-test-utils.exe from Releases (the .sig file next to it is for the built-in updater — you do not need it).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.
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" } } } }
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.
| Tool | Description |
|---|---|
take_screenshot | Screenshot of the entire desktop; quality presets from full to minimal (fewer tokens) |
take_window_screenshot | Screenshot of a specific window |
read_screen_text | OCR the entire screen (Windows OCR) |
read_region_text | OCR a screen region with precise word coordinates |
| Tool | Description |
|---|---|
list_windows | List windows with id, title, app, process id, position, size, state |
focus_window | Bring a window to the front and restore it if minimized; optionally set its position and size |
launch_app | Start a program from the allowlist of the server config (MCP_LAUNCH_APPS) and wait for its window |
close_window | Close a window as its X button would and wait until it is gone; reports a "Save changes?" prompt |
| Tool | Description |
|---|---|
mouse_click | Click an element by id or at coordinates (left / right / middle, double); can wait for the expected effect and retry |
mouse_move | Move the cursor to a point or to a UI element |
mouse_drag | Drag between elements or points at a human pace (HTML5 drag-and-drop works) |
mouse_scroll | Scroll the mouse wheel over an element and wait until the scrolling stops |
keyboard_type | Type text (full Unicode — Latin, Cyrillic, CJK, emoji) and check that the field shows what was typed |
keyboard_press | Press a key (Enter, Tab, F1–F12, arrows, etc.), optionally several times |
keyboard_shortcut | Press a key combination (Ctrl+S, Alt+F4, Ctrl+Shift+P, etc.) |
| Tool | Description |
|---|---|
list_ui_elements | UI Automation tree — buttons, fields, menus with ids, values, states and exact coordinates; filters by name, value, class |
get_focused_element | Which element has keyboard focus now, and in which window |
read_text | Full text of a document or field through UI Automation (up to 100 000 characters per call), no OCR |
ui_action | Act on an element without mouse or keyboard: invoke, toggle, expand, select an option, set a value, scroll into view |
check_accessibility | Accessibility defects: unnamed controls, controls the Tab key cannot reach, duplicate ids, zero-size controls |
| Tool | Description |
|---|---|
process_info | Memory, handles, GDI objects, threads and CPU of the app under test — call it repeatedly to spot leaks |
| Tool | Description |
|---|---|
wait_for | Wait for a window, an element or its state instead of sleeping |
batch | Run up to 20 tool calls in one request, with find and assert steps |
run_scenario | Replay a saved scenario, a suite or data rows and get a pass/fail report (see Regression runs) |
record_scenario | Record what you do in one window into a draft scenario (see Recording) |
| Tool | Description |
|---|---|
search_in_files | Search text or regex in files within allowed directories (like VS Code Find in Files) |
find_files | Find files and directories by name pattern (glob), like "Go to File" |
| Tool | Description |
|---|---|
get_usage_guide | Usage guide for agents: core rules + sections on request |
prepare_feedback | Prepare a suggestions file for the author (personal data masked; you review it and send it by email — nothing is sent automatically) |
| Tool | Description |
|---|---|
enable_logging | Start recording tool calls to JSONL + screenshots (opt-in) |
disable_logging | Stop recording, get session stats |
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.json
0 — passed, 1 — a step failed, 2 — did not run. Ready for a CI job after each build.run_scenario(path) and learns the format from get_usage_guide(section: "scenarios").--suite runs several scenario files in order with one summary; --data rows.csv runs a scenario once per row (columns become variables); --junit report.xml adds JUnit XML for CI. mcp-test-utils --suite regress.suite.json --junit regress.xml
Do the steps yourself and get a draft scenario instead of describing them to an agent:
mcp-test-utils --record order-form.json --app myapp
Only 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.
| Variable | Description | Default |
|---|---|---|
MCP_LOG_DIR | Path for log sessions. Without it, logging tools are hidden | — |
MCP_LOG_MAX_MB | Session size limit (warning when exceeded) | 500 |
MCP_LOG_RETAIN_DAYS | Auto-delete sessions older than N days. 0 to disable | 30 |
MCP_SEARCH_DIRS | Allowed directories for search_in_files and find_files (separated by ;). Without it, both are hidden | — |
MCP_LAUNCH_APPS | Programs (.exe files or folders, separated by ;) that launch_app may start. Shells, script hosts and interpreters are refused even when listed. Without it, launch_app starts nothing | — |
MCP_NOTIFY | off hides the tray icon and the live call log window | — |
MCP_INPUT_LOCK | off disables the keyboard and mouse lock while the server sends input | — |
MCP_INPUT_LOCK_STALL_MS | Server silence (ms) after which the lock releases your input | 60000 |
MCP_NOTIFY=off hides it.MCP_INPUT_LOCK=off turns the lock off.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.
check_accessibility finds unnamed controls, controls the Tab key cannot reach, duplicate idsprocess_info shows handles and GDI objects growing across repeated calls%LOCALAPPDATA%\mcp-test-utils\ and an update you install只显示了开头部分;其余内容请在仓库中阅读