Skip to main content
Glama

⚠️ 实验性 / 不成熟(EXPERIMENTAL / PRE-ALPHA)

这是个人「边做边学」的作品,尚未成熟、未上生产。它只在我的 Windows 机器上真机验证过一次(打开 Dify 的场景), Windows 专属,代码简单、缺少测试与文档,接口随时可能变动,也不保证安全。 请不要在重要/生产环境使用;如要用于他人机器或无人值守,风险自负。

pad-actions — 通用 Windows 动作 MCP

一个通用的、不局限于单一演示的 MCP 服务器:把"打开应用 / 打开 URL / 截图 / 查询服务状态 / 等待"定义成可复用工具。首个落地场景 = 从人的视角演示打开 Dify。

工具(通用动作)

工具

参数

作用

open_app

name (注册表 DisplayName 或 exe 名)、path? (exe 全路径)

启动应用(如 Docker Desktopnotepad)。注入:Explorer.exe 关联打开,非鼠标点击

open_url

urlbrowser? (default/chrome/edge/firefox)

用默认浏览器打开 URL

screenshot

path?

全屏 PNG 截图,返回保存路径

get_screen_size

虚拟桌面尺寸

app_running

name

检查进程是否在运行(可用于轮询 Docker 引擎就绪)

wait

ms

等待若干毫秒

所有工具返回结构化结果;不移动/点击鼠标,符合"鼠标不必要"。

Related MCP server: nuphus-mcp

开发与运行

cd pad-actions
uv sync
uv run pad-actions            # stdio(默认)
# uv run pad-actions sse   | streamable-http   (可选传输)

环境:Python 3.11+;依赖 mcp>=2(v2 API,FastMCP 已更名为 MCPServer)、msspsutil

客户端接入示例(Claude Desktop config)

uv sync 之后,脚本入口在这里(uv sync 时会提示,或用 uv run which pad-actions 确认实际路径):

{
  "mcpServers": {
    "pad-actions": {
      "command": "D:\\11\\Ayxi\\ai infra\\pad-actions\\.venv\\Scripts\\pad-actions.exe"
    }
  }
}

已真机验证的成果(2026-09-08)

  1. open_app("Docker Desktop") → 解析到 D:\Docker\Docker\Docker Desktop.exe 并启动;

  2. 轮询 ~15s 后 Docker 引擎就绪(v29.7.2,npipe://./pipe/dockerDesktopLinuxEngine);

  3. 因 Dify 容器全部 restart: always,引擎一启容器自动恢复(nginx/api/web/db 等 15 个全部 Up);

  4. open_url("http://localhost")HTTP 200,页面标题 "Sign in - Dify"(DB 已有管理员,故登录页而非 /install);

  5. screenshot() 保存为 ../dify/dify-open.png 作为演示截图。

一次 open_app → 引擎自愈 → 容器自启 → 打开页面,完整串通了"从人的视角打开 Dify"这个动作闭环。

Available Tools

6 tools
app_runningA

检查进程是否在运行。

Args: name: 进程名(如 "Docker Desktop"、 "docker"、 "com.docker.backend")。

Returns: running: 是否在运行;pids: 匹配到的进程 ID(可能多个)。

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral disclosure burden. It discloses the return values (running and pids) and notes that multiple pids may match, but it does not explicitly state that the operation is read-only, nor does it explain matching semantics (exact vs partial, case sensitivity) or error behavior. This is adequate but not thorough.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded with the core purpose, followed by clearly separated Args and Returns sections. Every sentence serves a purpose, and the docstring structure makes it easy to scan.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter check tool with no output schema, the description provides the essential elements: purpose, parameter meaning, and return contract. The only minor omissions are matching semantics and explicit read-only affirmation, which are low-risk for a status check. Overall it is complete enough for an agent to invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema provides only a string property 'name' with no description (0% coverage). The description compensates by defining name as the process name and offering three illustrative examples ('Docker Desktop', 'docker', 'com.docker.backend'), which gives the agent concrete grounding. It stops short of specifying matching rules, but for a single parameter this is sufficient.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: '检查进程是否在运行' (check whether a process is running), with concrete examples of process names. This clearly distinguishes it from sibling tools like open_app, open_url, screenshot, get_screen_size, and wait, which are all actions rather than a status check.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a clear context: it is a read-only status check for a process. Although it does not explicitly name alternatives or exclusion conditions, the sibling set contains no other process-checking tool, so the intended usage is unambiguous. The examples further clarify what qualifies as a process name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_screen_sizeA

返回虚拟桌面尺寸(物理像素)。

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It clearly discloses the output type (virtual desktop size) and unit (physical pixels), and implies a read-only operation with no side effects. It does not explicitly mention side effects or return format, but for a simple getter this is sufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, efficiently worded sentence delivers all essential information without any filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a parameterless, side-effect-free getter with no output schema, the description is complete. It states exactly what is returned and in what unit, leaving no gaps for an agent to infer.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the baseline of 4 applies. The description adds no parameter-specific information because there are no parameters to document.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('返回') and resource ('虚拟桌面尺寸') with the unit ('物理像素'). It is clearly distinct from siblings like screenshot or app_running, which serve different purposes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit when-to-use or when-not-to-use guidance is provided. However, the tool's purpose is self-evident, and none of the sibling tools overlap with it, so usage is implied rather than stated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

open_appA

启动一个已安装的应用。

Args: name: 应用显示名(如 "Docker Desktop")或 exe 名(如 "notepad")。 会按注册表 DisplayName 或 PATH 查找。 path: 应用 exe 的完整路径(优先于 name 使用)。

Returns: 是否成功启动,以及使用的路径/对象。

ParametersJSON Schema
NameRequiredDescriptionDefault
nameNo
pathNo

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the behavioral burden. It discloses lookup behavior (registry DisplayName or PATH) and return contents, which is helpful, but it does not mention side effects like starting a new GUI process, error behavior when the app is not found, or whether it blocks until the app exits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and well-structured: a one-sentence purpose, an Args block with clear parameter semantics, and a Returns note. Every sentence earns its place with no filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter launcher with no output schema, the description covers the core invocation semantics and return value. It could be more complete by noting failure conditions or how to handle already-running apps, but nothing critical needed to call the tool correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must fully explain the parameters. It does: name accepts a display name or exe name, lookup uses registry/PATH, and path is the full exe path with priority over name. This adds meaning the schema completely lacks.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 启动一个已安装的应用 (launch an installed app). This clearly differentiates it from siblings like open_url, screenshot, and app_running, which target different objects or operations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains how to launch an app with name or path, but it never states when to prefer open_app over alternatives, or when not to use it. There is no explicit routing such as 'for URLs use open_url' or 'to check if already running use app_running'.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

open_urlA

用浏览器打开一个 URL。

Args: url: 完整地址(如 http://localhost)。 browser: default | chrome | edge | firefox。

Returns: 是否成功发起打开。

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYes
browserNodefault

TDQS

A3.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full behavioral disclosure burden. It only says it opens a URL and returns a success flag, but it does not mention that this launches an external browser, whether the call blocks, what happens on invalid input, or any side effects. This is minimal for an action-oriented tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and well-structured with a front-loaded purpose line followed by Args and Returns sections. Every sentence earns its place, and there is no redundant or vague filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter tool, purpose, arguments, and return value are covered. However, usage guidance and side-effect context are missing, and with no output schema or annotations, the description is only minimally viable rather than fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, and the description compensates reasonably: url is defined as '完整地址' with an example (http://localhost), and browser is given explicit allowed values (default | chrome | edge | firefox). It does not explain the meaning of 'default' or error behavior, but it adds meaningful semantics beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states '用浏览器打开一个 URL' (open a URL with a browser), which is a specific verb and resource. This clearly distinguishes it from sibling tools like open_app (app opening) and screenshot (screen capture), making the tool's purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage (when you need to open a URL in a browser) but gives no explicit guidance about when to use this tool versus alternatives such as open_app. No exclusions or conditions are mentioned, so the agent must infer the appropriate context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

screenshotA

截取全屏 PNG。

Args: path: 保存路径;省略则存到临时目录。

Returns: 保存的文件路径。

ParametersJSON Schema
NameRequiredDescriptionDefault
pathNo

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the behavioral burden. It discloses that the tool captures the entire screen, saves to a specified path or a temporary directory when omitted, and returns the saved file path. Missing minor details like permission requirements or overwite behavior, but core behavior is transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact: one purpose sentence plus short Args and Returns lines. Every sentence earns its place and the main behavior is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with one optional parameter and no output schema, the description covers purpose, parameter behavior, and return value. It does not specify naming, overwite, or multi-monitor behavior, but these are minor for the basic use case.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must explain the path parameter. It does: path is the save destination, and omitting it stores the file in a temp directory. This adds meaningful semantic value beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: capture a full-screen PNG screenshot. This clearly distinguishes it from siblings like open_app, open_url, and get_screen_size, which do different things.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The use case is clear: use this when a full-screen PNG capture is needed. It gives context about the optional path and temporary fallback, and there are no competing screenshot tools among the siblings, so explicit exclusions are not necessary.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

waitA

等待 ms 毫秒(用于给服务启动/界面刷新留时间)。

ParametersJSON Schema
NameRequiredDescriptionDefault
msYes

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

There are no annotations, so the description carries the disclosure burden. It reveals the purpose but does not explicitly state that the call blocks, what happens after the delay, or that it has no side effects. For a simple wait operation this is a minor gap, but still a gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

One concise sentence with the operation front-loaded and the purpose in a parenthetical. Every word adds value; no redundancy or unnecessary detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a low-complexity tool with one parameter and no output schema, the description covers what it does, the parameter unit, and why to use it. It is nearly complete, but an explicit statement of return/behavior would push it to fully self-contained.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage with only an integer ms property, and the description compensates by explicitly linking ms to milliseconds. It does not give valid ranges or limits, but for a single-parameter wait tool, this is enough for correct invocation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool waits for a specified number of milliseconds and gives a concrete purpose (allowing time for service startup/interface refresh). It is unambiguous and distinct from the sibling tools, which are all about opening, running, or inspecting apps and screens.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The parenthetical '用于给服务启动/界面刷新留时间' tells the agent the intended use case. It does not explicitly mention when not to use it or alternative tools, but no sibling provides a sleep/wait operation, so the missing exclusion guidance is not a significant gap.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 6 tool updatesv0.1.0
    • First observedapp_running
    • First observedget_screen_size
    • First observedopen_app
    • First observedopen_url
    • First observedscreenshot
    • First observedwait

TDQS

A4/5.0

Scored across 6 tools

Disambiguation5/5

Each tool targets a distinct action: launching an app, opening a URL, capturing the screen, getting screen dimensions, checking a process, and waiting. There is no meaningful overlap or ambiguity among them.

Naming Consistency3/5

The naming is generally readable and mostly uses snake_case, but conventions vary: open_app/open_url/get_screen_size follow verb_noun, while app_running and screenshot break that pattern, and wait is just a bare verb. This is a minor inconsistency rather than chaos.

Tool Count5/5

Six tools is a reasonable, well-scoped set for a small desktop action utility. Every tool serves a practical purpose and the count feels neither bloated nor thin.

Completeness4/5

The set covers the core lifecycle of opening apps/URLs, checking whether they started, waiting, and capturing screen state. Minor gaps exist such as no close_app or window interaction, but agents can still complete common workflows without major dead ends.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables automation of native Windows desktop applications through screen capture, mouse/keyboard control, and waiting for UI changes, exposing them as MCP tools.
    1
    -
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables Windows UI Automation through MCP, allowing agents to inspect, search, navigate, and interact with desktop UI elements via the UIAutomation framework. Supports actions such as focus, invoke, set-value, toggle, and event waiting, with CLI and VS Code extension variants.
    2
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides desktop automation tools for Windows, enabling mouse and keyboard control, screenshots, clipboard management, and application interaction via the MCP protocol.
    87
    MIT

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/vvn6d4zg82-byte/pad-actions'

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