open-compute-mcp 0.1.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md ADDED
@@ -0,0 +1,24 @@
1
+ # Changelog
2
+
3
+ All notable changes to this package are documented here.
4
+
5
+ The format follows [Keep a Changelog](https://keepachangelog.com/en/1.0.0/) and the
6
+ project adheres to [Semantic Versioning](https://semver.org/).
7
+
8
+ ## [0.1.0-alpha.1] — 2026-07-05
9
+
10
+ ### Added
11
+
12
+ - Initial release: npm launcher (`npx open-compute-mcp`) for the open-compute MCP
13
+ server. Spawns the Python server and pipes MCP stdio through.
14
+ - Launches open-compute **from GitHub** via `uvx` (the `mcp` extra tracks the GitHub
15
+ repo, so this works regardless of PyPI release timing); overridable with
16
+ `OPEN_COMPUTE_PYTHON` / `OPEN_COMPUTE_MCP_CMD` / `OPEN_COMPUTE_GIT_REF` /
17
+ `OPEN_COMPUTE_EXTRAS`.
18
+ - Faithful exit-code / signal pass-through and a clear error when Python/uv is
19
+ missing.
20
+ - Terminal-only update notice (`update-notifier`, TTY-guarded so it never corrupts
21
+ the stdio protocol).
22
+ - Tools exposed by the server: `capture`, `do`, `tree`, `click_name`, `invoke`,
23
+ `watch_dir`, `push_status`, `rec_replay`. Tool descriptions localized in six
24
+ languages (de/en/es/ja/ru/zh) via `OC_LANGUAGE`.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 The open-compute authors
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,94 @@
1
+ # open-compute-mcp
2
+
3
+ **npm launcher for the [open-compute](https://github.com/ellmos-ai/open-compute) MCP server** —
4
+ model-agnostic **computer-use** tools exposed over the Model Context Protocol (MCP).
5
+
6
+ **EN** | [DE](README_de.md)
7
+
8
+ The MCP **client is the reasoner** (no API key, model-agnostic): it calls `capture`
9
+ to see the screen, then acts with `do` / `click_name` / `invoke`. This is the keyless
10
+ Mode-A loop of open-compute, but as native tool-calls.
11
+
12
+ > This package is a **thin launcher**. It contains no server logic — it spawns the
13
+ > **Python** open-compute server (pulled from GitHub) and pipes MCP stdio through.
14
+ > Real screen capture and input require the **interactive Windows desktop session**.
15
+
16
+ ## Requirements
17
+
18
+ - **Python 3.10+** and **[uv](https://docs.astral.sh/uv/)** on the host. The default
19
+ launch uses `uvx` to fetch open-compute (with the `mcp` extra) **from GitHub** on
20
+ first run — the `mcp` extra tracks the GitHub repo, so this works regardless of
21
+ PyPI release timing.
22
+ - **Windows** for real capture/input (mss + UIA). Other platforms import the tools
23
+ but cannot drive a desktop.
24
+
25
+ ## Tools
26
+
27
+ | Tool | Purpose |
28
+ |---|---|
29
+ | `capture` | Screenshot the screen → returned as an image (optionally a single window). |
30
+ | `do` | Execute one canonical action or a batch (click/type/key/scroll/drag/…). |
31
+ | `tree` | List UI elements via Windows UIA (name/role/`center_norm`). |
32
+ | `click_name` | Resolve an element by name and click it. |
33
+ | `invoke` | Click-free activation of an element via UIA patterns. |
34
+ | `watch_dir` | Watch directories for file-system changes. |
35
+ | `push_status` | Feed-manager status (read-only). |
36
+ | `rec_replay` | Replay a `.clirec` macro (needs the optional `clirec` package). |
37
+
38
+ All coordinates are **normalized 0..1** relative to the virtual desktop. Tool
39
+ descriptions are localized in six languages (`de/en/es/ja/ru/zh`) via `OC_LANGUAGE`.
40
+
41
+ ## Use with an MCP client
42
+
43
+ **Via this npm launcher (npx):**
44
+
45
+ ```json
46
+ {
47
+ "mcpServers": {
48
+ "open-compute": {
49
+ "command": "npx",
50
+ "args": ["-y", "open-compute-mcp"]
51
+ }
52
+ }
53
+ }
54
+ ```
55
+
56
+ **Directly via Python (uvx), no npm:**
57
+
58
+ ```json
59
+ {
60
+ "mcpServers": {
61
+ "open-compute": {
62
+ "command": "uvx",
63
+ "args": ["--from", "open-compute[mcp,local,uia] @ git+https://github.com/ellmos-ai/open-compute.git", "open-compute-mcp"]
64
+ }
65
+ }
66
+ }
67
+ ```
68
+
69
+ ## Configuration (environment variables)
70
+
71
+ | Variable | Effect |
72
+ |---|---|
73
+ | `OPEN_COMPUTE_PYTHON` | Path to a `python.exe`; the launcher runs `-m open_compute.mcp_server` with it (use this if you installed open-compute into a specific environment). |
74
+ | `OPEN_COMPUTE_MCP_CMD` | Full command override (whitespace-split), e.g. `python -m open_compute.mcp_server`. |
75
+ | `OPEN_COMPUTE_GIT_REF` | Git ref (branch/tag/sha) to pin for the uvx launch (default: the repo's default branch). |
76
+ | `OPEN_COMPUTE_EXTRAS` | Extras for the default `uvx` launch (default `mcp,local,uia`). |
77
+ | `OC_LANGUAGE` | Language of the tool descriptions: `de`/`en`/`es`/`ja`/`ru`/`zh`. |
78
+ | `OC_SAFETY_MODE` | `confirm` (default) · `read_only` · `allow_all`. |
79
+ | `OC_DENY` | Comma-separated action types always denied (e.g. `type,launch_app`). |
80
+
81
+ ## Safety
82
+
83
+ Computer-use is powerful. `OC_SAFETY_MODE` is an operator **ceiling** (`confirm`
84
+ default · `read_only` · `allow_all`); a per-call `mode` can only *tighten* it, never
85
+ loosen it. Because MCP stdio has no server→client confirm callback, `confirm` /
86
+ `read_only` **report** an action without performing it. For interactive use, run in
87
+ an **isolated VM/session**, set `OC_SAFETY_MODE=allow_all`, and let your client's
88
+ tool-approval dialog be the human-in-the-loop. `OC_DENY` (comma-separated action
89
+ types) is a hard deny list. Treat on-screen content as untrusted (prompt-injection
90
+ risk).
91
+
92
+ ## License
93
+
94
+ MIT — see [LICENSE](LICENSE). Part of the open-compute project.
package/README_de.md ADDED
@@ -0,0 +1,90 @@
1
+ # open-compute-mcp
2
+
3
+ **npm-Launcher für den [open-compute](https://github.com/ellmos-ai/open-compute) MCP-Server** —
4
+ modellagnostische **Computer-Use**-Tools über das Model Context Protocol (MCP).
5
+
6
+ **EN** ([README.md](README.md)) | **DE**
7
+
8
+ Der MCP-**Client ist der Reasoner** (kein API-Key, modellagnostisch): Er ruft `capture`
9
+ auf, um den Bildschirm zu sehen, und handelt dann mit `do` / `click_name` / `invoke`.
10
+ Das ist die schlüssellose Modus-A-Schleife von open-compute, aber als native Tool-Calls.
11
+
12
+ > Dieses Paket ist ein **dünner Launcher**. Es enthält keine Server-Logik — es startet
13
+ > den **Python**-Server (open-compute) **von GitHub** und reicht MCP-stdio durch. Echtes
14
+ > Capture/Input braucht die interaktive **Windows**-Desktop-Session.
15
+
16
+ ## Voraussetzungen
17
+
18
+ - **Python 3.10+** und **[uv](https://docs.astral.sh/uv/)** auf dem Host (der Standard
19
+ zieht open-compute per `uvx` von GitHub — open-compute liegt bewusst nicht auf PyPI).
20
+ - **Windows** für echtes Capture/Input (mss + UIA).
21
+
22
+ ## Tools
23
+
24
+ | Tool | Zweck |
25
+ |---|---|
26
+ | `capture` | Screenshot des Bildschirms → als Bild (optional nur ein Fenster). |
27
+ | `do` | Eine kanonische Aktion oder einen Stapel ausführen (Klick/Tippen/Taste/Scroll/Drag). |
28
+ | `tree` | UI-Elemente eines Fensters via Windows-UIA auflisten (Name/Rolle/`center_norm`). |
29
+ | `click_name` | Element per Name auflösen und anklicken. |
30
+ | `invoke` | Klickfreie Aktivierung eines Elements via UIA-Muster. |
31
+ | `watch_dir` | Verzeichnisse auf Dateisystem-Änderungen überwachen. |
32
+ | `push_status` | Feed-Manager-Status (nur Lesen). |
33
+ | `rec_replay` | Ein `.clirec`-Makro abspielen (benötigt das optionale `clirec`-Paket). |
34
+
35
+ Alle Koordinaten sind **normiert 0..1** relativ zum virtuellen Desktop. Tool-Beschreibungen
36
+ sind in sechs Sprachen lokalisiert (`de/en/es/ja/ru/zh`) — wählbar über `OC_LANGUAGE`.
37
+
38
+ ## Nutzung mit einem MCP-Client
39
+
40
+ **Über diesen npm-Launcher (npx):**
41
+
42
+ ```json
43
+ {
44
+ "mcpServers": {
45
+ "open-compute": {
46
+ "command": "npx",
47
+ "args": ["-y", "open-compute-mcp"]
48
+ }
49
+ }
50
+ }
51
+ ```
52
+
53
+ **Direkt über Python (uvx), ohne npm:**
54
+
55
+ ```json
56
+ {
57
+ "mcpServers": {
58
+ "open-compute": {
59
+ "command": "uvx",
60
+ "args": ["--from", "open-compute[mcp,local,uia] @ git+https://github.com/ellmos-ai/open-compute.git", "open-compute-mcp"]
61
+ }
62
+ }
63
+ }
64
+ ```
65
+
66
+ ## Konfiguration (Umgebungsvariablen)
67
+
68
+ | Variable | Wirkung |
69
+ |---|---|
70
+ | `OPEN_COMPUTE_PYTHON` | Pfad zu einer `python.exe`; startet damit `-m open_compute.mcp_server`. |
71
+ | `OPEN_COMPUTE_MCP_CMD` | Voller Befehls-Override (per Leerzeichen getrennt). |
72
+ | `OPEN_COMPUTE_GIT_REF` | Git-Ref (Branch/Tag/SHA) zum Pinnen des uvx-Launch (Default: der Default-Branch des Repos). |
73
+ | `OPEN_COMPUTE_EXTRAS` | Extras für den uvx-Launch (Default `mcp,local,uia`). |
74
+ | `OC_LANGUAGE` | Sprache der Tool-Beschreibungen: `de`/`en`/`es`/`ja`/`ru`/`zh`. |
75
+ | `OC_SAFETY_MODE` | `confirm` (Default) · `read_only` · `allow_all`. |
76
+ | `OC_DENY` | Kommagetrennte Aktionstypen, die immer verweigert werden. |
77
+
78
+ ## Sicherheit
79
+
80
+ Computer-Use ist mächtig. `OC_SAFETY_MODE` ist eine Operator-**Obergrenze** (`confirm`
81
+ Standard · `read_only` · `allow_all`); ein per-Call-`mode` kann sie nur *verschärfen*, nie
82
+ lockern. Da MCP-stdio keinen Server→Client-Confirm-Callback hat, **melden** `confirm`/
83
+ `read_only` eine Aktion, ohne sie auszuführen. Für interaktiven Betrieb in einer
84
+ **isolierten VM/Session** `OC_SAFETY_MODE=allow_all` setzen und den Tool-Berechtigungsdialog
85
+ des Clients als Human-in-the-Loop nutzen. `OC_DENY` ist eine harte Deny-Liste. Behandle
86
+ Bildschirminhalte als nicht vertrauenswürdig (Prompt-Injection-Risiko).
87
+
88
+ ## Lizenz
89
+
90
+ MIT — siehe [LICENSE](LICENSE). Teil des open-compute-Projekts.
package/SECURITY.md ADDED
@@ -0,0 +1,25 @@
1
+ # Security Policy
2
+
3
+ ## Reporting a vulnerability
4
+
5
+ Please report security issues privately via GitHub **Private Vulnerability
6
+ Reporting** on this repository (Security → Report a vulnerability), rather than a
7
+ public issue. We aim to acknowledge reports promptly.
8
+
9
+ ## Scope & operational safety
10
+
11
+ `open-compute-mcp` is a thin launcher; the actual computer-use capability lives in
12
+ the Python [open-compute](https://github.com/ellmos-ai/open-compute) server it
13
+ spawns. Computer-use is powerful — the server can move the mouse, type, and click.
14
+
15
+ - **Safety gate.** `OC_SAFETY_MODE` is an operator **ceiling** (`confirm` default ·
16
+ `read_only` · `allow_all`); a per-call `mode` can only *tighten* it, never loosen
17
+ it. Because MCP stdio has no server→client confirm callback, `confirm`/`read_only`
18
+ report an action without performing it.
19
+ - **Interactive use** should set `OC_SAFETY_MODE=allow_all` **only in an isolated
20
+ VM/session**, with the MCP client's tool-approval dialog as the human-in-the-loop.
21
+ - **`OC_DENY`** (comma-separated action types) is a hard deny list.
22
+ - Treat on-screen content as **untrusted** (prompt-injection risk).
23
+
24
+ Never run this against a machine holding sensitive data without isolation and a
25
+ human in the loop.
@@ -0,0 +1,95 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+
4
+ /**
5
+ * npm launcher for the open-compute MCP server.
6
+ *
7
+ * This is a thin wrapper: it spawns the Python MCP server (open-compute[mcp])
8
+ * and pipes MCP stdio (stdin/stdout/stderr) straight through. It contains NO
9
+ * server logic — the reasoning, capture and input all happen in the Python
10
+ * process, which requires the interactive Windows desktop session.
11
+ *
12
+ * Launch resolution (first match wins):
13
+ * 1. OPEN_COMPUTE_MCP_CMD — full command override, e.g.
14
+ * "C:\\path\\to\\python.exe -m open_compute.mcp_server"
15
+ * 2. OPEN_COMPUTE_PYTHON — a python executable; run its -m open_compute.mcp_server
16
+ * 3. uvx (default) — launches open-compute from GitHub via uv:
17
+ * uvx --from "open-compute[<extras>] @ git+https://github.com/ellmos-ai/open-compute.git@<ref>" open-compute-mcp
18
+ * extras default "mcp,local,uia" (OPEN_COMPUTE_EXTRAS); ref defaults to the
19
+ * repo's default branch (set OPEN_COMPUTE_GIT_REF to pin a branch/tag/sha).
20
+ * The mcp extra tracks the GitHub repo, so the launcher pulls open-compute
21
+ * from GitHub regardless of PyPI timing.
22
+ *
23
+ * Requires Python + uv on the host (uvx pulls open-compute from GitHub on first
24
+ * run). Windows-only for real capture/input.
25
+ */
26
+
27
+ const { spawn } = require("node:child_process");
28
+
29
+ // Terminal-only update notice — TTY-guarded so it never corrupts the stdio MCP
30
+ // protocol (matches the ellmos MCP server convention). Never blocks startup.
31
+ if (process.stdout.isTTY) {
32
+ import("update-notifier")
33
+ .then(({ default: notifier }) => notifier({ pkg: require("../package.json") }).notify())
34
+ .catch(() => {});
35
+ }
36
+
37
+ function tokenize(cmdline) {
38
+ // Minimal whitespace split; quote a path via OPEN_COMPUTE_PYTHON instead if it
39
+ // contains spaces.
40
+ return cmdline.split(/\s+/).filter(Boolean);
41
+ }
42
+
43
+ function resolveLaunch() {
44
+ const override = process.env.OPEN_COMPUTE_MCP_CMD;
45
+ if (override && override.trim()) {
46
+ const parts = tokenize(override.trim());
47
+ return { cmd: parts[0], args: parts.slice(1), how: "OPEN_COMPUTE_MCP_CMD" };
48
+ }
49
+ const py = process.env.OPEN_COMPUTE_PYTHON;
50
+ if (py && py.trim()) {
51
+ return { cmd: py.trim(), args: ["-m", "open_compute.mcp_server"], how: "OPEN_COMPUTE_PYTHON" };
52
+ }
53
+ const extras = (process.env.OPEN_COMPUTE_EXTRAS || "mcp,local,uia").trim();
54
+ const ref = (process.env.OPEN_COMPUTE_GIT_REF || "").trim();
55
+ const refSuffix = ref ? `@${ref}` : ""; // empty -> uv uses the repo's default branch
56
+ // Launch open-compute from GitHub (PEP 508 "name[extras] @ git+URL").
57
+ const spec = `open-compute[${extras}] @ git+https://github.com/ellmos-ai/open-compute.git${refSuffix}`;
58
+ return {
59
+ cmd: "uvx",
60
+ args: ["--from", spec, "open-compute-mcp"],
61
+ how: "uvx (github)",
62
+ };
63
+ }
64
+
65
+ const { cmd, args, how } = resolveLaunch();
66
+
67
+ const child = spawn(cmd, args, { stdio: "inherit", windowsHide: true });
68
+
69
+ child.on("error", (err) => {
70
+ process.stderr.write(
71
+ `[open-compute-mcp] failed to launch the Python server via ${how} ('${cmd}'): ${err.message}\n` +
72
+ "Ensure Python and open-compute[mcp] are installed, or set OPEN_COMPUTE_PYTHON " +
73
+ "(a python.exe) or OPEN_COMPUTE_MCP_CMD (a full command). Real capture/input is Windows-only.\n"
74
+ );
75
+ process.exit(127);
76
+ });
77
+
78
+ child.on("exit", (code, signal) => {
79
+ if (signal) {
80
+ // Re-raise the terminating signal so the parent's exit status is faithful.
81
+ process.kill(process.pid, signal);
82
+ return;
83
+ }
84
+ process.exit(code == null ? 0 : code);
85
+ });
86
+
87
+ for (const sig of ["SIGINT", "SIGTERM", "SIGHUP"]) {
88
+ process.on(sig, () => {
89
+ try {
90
+ child.kill(sig);
91
+ } catch (_) {
92
+ /* child already gone */
93
+ }
94
+ });
95
+ }
package/package.json ADDED
@@ -0,0 +1,50 @@
1
+ {
2
+ "name": "open-compute-mcp",
3
+ "version": "0.1.0-alpha.1",
4
+ "mcpName": "io.github.ellmos-ai/open-compute-mcp",
5
+ "description": "npm launcher for the open-compute MCP server: model-agnostic computer-use tools (screenshot capture, canonical safety-gated actions, Windows UIA element targeting) over MCP stdio. Spawns the Python open-compute server (from GitHub).",
6
+ "type": "commonjs",
7
+ "bin": {
8
+ "open-compute-mcp": "bin/open-compute-mcp.js"
9
+ },
10
+ "files": [
11
+ "bin/",
12
+ "README.md",
13
+ "README_de.md",
14
+ "CHANGELOG.md",
15
+ "SECURITY.md",
16
+ "LICENSE",
17
+ "server.json"
18
+ ],
19
+ "engines": {
20
+ "node": ">=18.0.0"
21
+ },
22
+ "license": "MIT",
23
+ "keywords": [
24
+ "mcp",
25
+ "model-context-protocol",
26
+ "mcp-server",
27
+ "computer-use",
28
+ "gui-automation",
29
+ "desktop-automation",
30
+ "windows",
31
+ "uia",
32
+ "screenshot",
33
+ "automation",
34
+ "claude",
35
+ "claude-desktop",
36
+ "ai-tools"
37
+ ],
38
+ "dependencies": {
39
+ "update-notifier": "^7.3.1"
40
+ },
41
+ "author": "Lukas (ellmos-ai)",
42
+ "repository": {
43
+ "type": "git",
44
+ "url": "git+https://github.com/ellmos-ai/open-compute-mcp.git"
45
+ },
46
+ "homepage": "https://github.com/ellmos-ai/open-compute-mcp#readme",
47
+ "bugs": {
48
+ "url": "https://github.com/ellmos-ai/open-compute-mcp/issues"
49
+ }
50
+ }
package/server.json ADDED
@@ -0,0 +1,22 @@
1
+ {
2
+ "$schema": "https://static.modelcontextprotocol.io/schemas/2025-12-11/server.schema.json",
3
+ "name": "io.github.ellmos-ai/open-compute-mcp",
4
+ "version": "0.1.0-alpha.1",
5
+ "title": "open-compute (computer-use)",
6
+ "description": "Model-agnostic computer-use MCP: screenshot capture, canonical safety-gated actions, and Windows UIA element targeting. npm launcher for the Python open-compute server.",
7
+ "websiteUrl": "https://github.com/ellmos-ai/open-compute-mcp",
8
+ "repository": {
9
+ "url": "https://github.com/ellmos-ai/open-compute-mcp",
10
+ "source": "github",
11
+ "id": "ellmos-ai/open-compute-mcp"
12
+ },
13
+ "packages": [
14
+ {
15
+ "registryType": "npm",
16
+ "identifier": "open-compute-mcp",
17
+ "version": "0.1.0-alpha.1",
18
+ "transport": { "type": "stdio" },
19
+ "runtimeHint": "npx"
20
+ }
21
+ ]
22
+ }