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 +24 -0
- package/LICENSE +21 -0
- package/README.md +94 -0
- package/README_de.md +90 -0
- package/SECURITY.md +25 -0
- package/bin/open-compute-mcp.js +95 -0
- package/package.json +50 -0
- package/server.json +22 -0
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
|
+
}
|