# Pc Screen Control

> MCP server for Windows. Gives an AI the accessibility tree instead of screenshots, so it operates controls by name and reports the state before and after. 34 tools, no network access, one-click install for Claude Desktop, works with any MCP client.

- **Type:** MCP server
- **Install:** `agentstack add mcp-desteny-dev-pc-screen-control`
- **Verified:** Yes — security-reviewed for prompt injection and unsafe behavior
- **Seller:** [desteny-dev](https://agentstack.voostack.com/s/desteny-dev)
- **Installs:** 0
- **Category:** [AI & ML](https://agentstack.voostack.com/c/ai-and-ml)
- **Latest version:** 0.1.0
- **License:** MIT
- **Upstream author:** [desteny-dev](https://github.com/desteny-dev)
- **Source:** https://github.com/desteny-dev/pc-screen-control

## Install

```sh
agentstack add mcp-desteny-dev-pc-screen-control
```

Requires the [AgentStack CLI](https://agentstack.voostack.com/docs/cli). Works with Claude Code, Cursor, and any MCP-compatible agent.

## About

A screenshot is a picture made for human eyes.This hands your AI the screen as data instead.

An MCP server for Windows · one-click install for Claude Desktop · works with any MCP client

  
  

  
  
  
  
  

---

## Install

Needs Windows and [Python 3.9+](https://www.python.org/downloads/) — tick
**"Add python.exe to PATH"** during its setup. Two downloads, the same server
inside both. Take either.

**`pc-screen-control-setup.zip` — works everywhere.** Extract it, double-click
**`INSTALL.bat`**, restart your AI. One run registers every MCP client it finds
and prints a line per client saying `added`, `updated` or `skipped`: Claude
Desktop, Claude Desktop from the Microsoft Store, Claude Code, and ChatGPT
desktop / Codex. For Cursor, VS Code, Cline and Zed — which want a config block
pasted in — `print-config.py` beside it prints that block with your real path
already filled in.

**`pc-screen-control.mcpb` — one click, Claude Desktop only.** Settings →
Extensions → Advanced → Install extension → restart Claude. Convenient for a
**first** install. It cannot repair a broken one: if Claude answers *"Private
dir leaf redirects (junction/substitute-name plant)"*, then no version of this
file will install — not the new one, not the old one you had before. The block
is in Claude, not in the package. Use the `.zip`; that route is unaffected
([why](docs/WINDOWS-EXTENSIONS.md)).

Then ask your AI to run **`self_test`**. It reports what works, and every
failure names its own fix.

**Upgrading: install straight over the old version. Do not uninstall
first** — on Windows that is the step that leaves Claude unable to install the
extension again. Quit the app completely, tray icon included, then install. ·
[Full guide](docs/GUIDE.md) · [Other clients](docs/OTHER_CLIENTS.md) ·
[If your antivirus objects](docs/ANTIVIRUS.md)

---

## What it does

A screenshot is a picture. An AI looking at one has to work out what the shapes
mean and then aim at a pixel.

Windows already publishes the same screen as **structured data** — every button,
field and list, by name, type and state. It is what screen readers read. This
hands your AI that instead of the picture.

And a button is not clicked at a coordinate. **It is asked to press itself:**
the application carries out its own action and reports what changed. Nothing is
aimed at, nothing is guessed, and the confirmation is in the reply rather than
in another screenshot.

|  | screenshot + coordinates | this |
|---|---|---|
| find a button | work out which shape it is, aim at a pixel | ask for it by name |
| press it | move the mouse there and click | tell the application to invoke it |
| the window moved | the coordinates are wrong | nothing changes — the name did not move |
| did it work? | take another screenshot and look | the reply carries the state before and after |
| your mouse | taken | untouched |

---

## Does it use your screen?

Mostly not.

**30 of the 34 tools never touch your mouse or keyboard.** Reading the window
tree is pure data. Pressing a button, filling a field, setting a slider go
through the accessibility interface and work on a window that is behind others,
or not visible at all.

**Four tools do take the hardware:** `click`, `drag`, `send_keys`, `hold_key`.
They are for surfaces that paint themselves and publish no controls: editing
canvases, timelines, games. While one runs, the screen edge pulses red, a
Windows notification states what is happening and for how long, and your input
is held so your keystrokes cannot land inside the work. Window, focus and text
cursor are restored when the block ends, and the reply reports whether that
succeeded.

**A claimed window is outside your view entirely.** `claim_window` moves a
window just past the edge of every monitor. It keeps running and stays fully
operable by name, but it is not visible and Windows will not let your pointer
leave the monitors, so you cannot click it by accident. Work on a parked window
takes no block at all: no pulse, no held input, no interruption.

This is **not** a private virtual display. Windows does not let an ordinary
program create a second screen for an application. Parking off-monitor is the
closest equivalent that works.

The tray icon's Pause, Stop and Watch stay clickable while your input is held;
the taskbar is excluded from the hold.

---

## The 34 tools

| | |
|---|---|
| **`describe_screen`** | Every window, classified `readable` / `shallow` / `canvas-only`. Start here. |
| `list_windows` `read_ui_tree` `find_elements` | The control tree, searchable, each node with a `ref` |
| `element_from_point` `get_focus` `get_text` `read_text` | What is where, what has focus, what it says |
| **`read_table`** | A grid or details list as rows, columns and headers |
| **`capture`** | Image of the screen, a window, or **a single element** |
| `invoke` `toggle` `expand` `select` `set_text` | Operate controls — all return before/after |
| **`set_value`** | A slider, spinner or scroll position to an exact number |
| **`window`** | Move, resize, minimise, maximise — without the mouse |
| **`clipboard`** | Read or write it. One call instead of hundreds of keystrokes |
| **`menu`** | Open a context menu and read it — menus do not exist until opened |
| `click` `drag` `scroll` | Coordinate input, last resort for self-drawn surfaces |
| `send_keys` `hold_key` | Keyboard, for shortcuts |
| **`wait_for`** `wait` | Wait for a condition, not for the clock |
| **`batch`** | Several verified steps in one call |
| `launch_app` `close_window` `focus_window` | Processes and windows |
| **`self_test`** | Checks the installation and reports what is wrong and how to fix it |
| **`claim_window`** `release_window` | Park a window out of your reach, and put it back to the pixel |
| **`set_guard`** | Who has priority while the AI works — `claude` or `me` |

---

## Reach, measured

Measured with `tests/measure_desktop.py`, which ships here so the numbers can
be reproduced or contradicted on your own machine.

| | actionable nodes |
|---|---:|
| File Explorer | 220 |
| Chrome / Electron — VS Code, Slack, Discord, Teams, Notion | 207–398 |
| DaVinci Resolve, Project Manager | 53 |

Browsers and Electron build their tree only once something asks: a first look
reports 13 nodes, 207 after waking it. Self-drawn surfaces publish no controls
and are reached with `capture` and `click` instead.

---

## Before you rely on it

- **Windows only.** `docs/PORTING.md` maps the patterns onto the macOS
  Accessibility API, but none of it has been implemented. macOS is **not
  available**.
- **No network at all.** The server opens no socket — no update check, no
  telemetry. Two files here *do* use the network and neither ships: the updater
  you start by hand, and a workflow on GitHub's machines that verifies every
  release against its source. [SECURITY.md](.github/SECURITY.md)
- **Control names follow the window's language** — *Speichern*, not *Save*.
  About half of all elements also carry an `automation_id`, which does not
  translate; `find_elements` searches both and says which matched.
- **Your antivirus may object.** A program that reads other applications and
  moves the mouse is structurally similar to spyware. There is no code signing
  certificate here; the server is a single readable Python file instead.
  [docs/ANTIVIRUS.md](docs/ANTIVIRUS.md)
- **Administrator processes are invisible.** Windows blocks input across
  integrity levels by design.
- **No undo of its own.** Closing a window or sending a message is not something
  any tool takes back.
- **Maintained by one person.** No support contract, no SLA.

---

## Verification

Every claim on this page has a test behind it. 19 test files run in CI on
Python 3.9, 3.11 and 3.13, and each release is checked against its own source
automatically: the published packages are downloaded and compared byte for byte
with the code at their tag.

Run them yourself: `python -m pytest -q`, or any single file directly —
`python tests/test_offline.py`.

[Changelog](CHANGELOG.md) · [Security](.github/SECURITY.md) ·
[Contributing](.github/CONTRIBUTING.md) · [Other clients](docs/OTHER_CLIENTS.md)
· MIT © 2026 Desteny Development

---

**Disclaimer.** This software controls your computer — buttons, typing,
closing windows, dragging, including in apps holding unsaved work. Provided
**as is**, no warranty ([LICENSE](LICENSE)). You are responsible for what you
automate; test on something you can afford to lose. Automating third-party
software may breach its terms.

## Source & license

This open-source MCP server is cataloged on AgentStack and links to its original source — we do not rehost the code.

- **Author:** [desteny-dev](https://github.com/desteny-dev)
- **Source:** [desteny-dev/pc-screen-control](https://github.com/desteny-dev/pc-screen-control)
- **License:** MIT

Install and usage instructions live in the source repository linked above.

## Pricing

- **Free** — Free

## Security capabilities

Automated source analysis of v0.1.0 — what this tool can access:

- **Network access:** no
- **Filesystem access:** no
- **Shell / process execution:** no
- **Environment & secrets:** no
- **Dynamic code execution:** no

*"Yes" means the capability is present in the source — more access means more to trust, not that it is unsafe.*


## Versions

- **0.1.0** — security scan: passed — Imported from the upstream source.

## Links

- Listing page: https://agentstack.voostack.com/l/mcp-desteny-dev-pc-screen-control
- Seller: https://agentstack.voostack.com/s/desteny-dev
- Browse the marketplace: https://agentstack.voostack.com/browse

---
Listed on AgentStack — the marketplace for AI agent skills and MCP servers. Every listing is security-reviewed. Creators keep 70%.
