open-computer-use-mcp 0.1.2

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.
@@ -0,0 +1,20 @@
1
+ {
2
+ "name": "open-computer-use-local",
3
+ "interface": {
4
+ "displayName": "Open Computer Use Local"
5
+ },
6
+ "plugins": [
7
+ {
8
+ "name": "open-computer-use",
9
+ "source": {
10
+ "source": "local",
11
+ "path": "./plugins/open-computer-use"
12
+ },
13
+ "policy": {
14
+ "installation": "AVAILABLE",
15
+ "authentication": "ON_INSTALL"
16
+ },
17
+ "category": "Productivity"
18
+ }
19
+ ]
20
+ }
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Leo
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,32 @@
1
+ # open-computer-use-mcp
2
+
3
+ Prebuilt macOS npm distribution for the open-source **Open Computer Use** MCP server.
4
+
5
+ This package bundles a ready-to-run `OpenComputerUse.app`, the Codex plugin metadata, and three global command aliases:
6
+
7
+ - `open-computer-use`
8
+ - `open-computer-use-mcp`
9
+ - `open-codex-computer-use-mcp`
10
+
11
+ ## Install
12
+
13
+ ```bash
14
+ npm install -g open-computer-use-mcp
15
+ ```
16
+
17
+ ## Use
18
+
19
+ ```bash
20
+ open-computer-use doctor
21
+ open-computer-use mcp
22
+ open-computer-use install-codex-plugin
23
+ ```
24
+
25
+ ## Notes
26
+
27
+ - Version: `0.1.2`
28
+ - Platform: macOS 14+
29
+ - Architectures: `arm64` and `x64` via a universal app bundle
30
+ - The host terminal or app still needs macOS `Accessibility` and `Screen Recording` permissions
31
+
32
+ Source repository: https://github.com/iFurySt/open-codex-computer-use
@@ -0,0 +1,18 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ package_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
5
+ app_binary="${package_root}/dist/OpenComputerUse.app/Contents/MacOS/OpenComputerUse"
6
+ install_script="${package_root}/scripts/install-codex-plugin.sh"
7
+
8
+ if [[ "${1:-}" == "install-codex-plugin" ]]; then
9
+ shift
10
+ exec "${install_script}" "$@"
11
+ fi
12
+
13
+ if [[ ! -x "${app_binary}" ]]; then
14
+ echo "open-computer-use could not find a runnable app bundle at ${app_binary}." >&2
15
+ exit 1
16
+ fi
17
+
18
+ exec "${app_binary}" "$@"
@@ -0,0 +1,18 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ package_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
5
+ app_binary="${package_root}/dist/OpenComputerUse.app/Contents/MacOS/OpenComputerUse"
6
+ install_script="${package_root}/scripts/install-codex-plugin.sh"
7
+
8
+ if [[ "${1:-}" == "install-codex-plugin" ]]; then
9
+ shift
10
+ exec "${install_script}" "$@"
11
+ fi
12
+
13
+ if [[ ! -x "${app_binary}" ]]; then
14
+ echo "open-computer-use could not find a runnable app bundle at ${app_binary}." >&2
15
+ exit 1
16
+ fi
17
+
18
+ exec "${app_binary}" "$@"
@@ -0,0 +1,18 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+
4
+ package_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
5
+ app_binary="${package_root}/dist/OpenComputerUse.app/Contents/MacOS/OpenComputerUse"
6
+ install_script="${package_root}/scripts/install-codex-plugin.sh"
7
+
8
+ if [[ "${1:-}" == "install-codex-plugin" ]]; then
9
+ shift
10
+ exec "${install_script}" "$@"
11
+ fi
12
+
13
+ if [[ ! -x "${app_binary}" ]]; then
14
+ echo "open-computer-use could not find a runnable app bundle at ${app_binary}." >&2
15
+ exit 1
16
+ fi
17
+
18
+ exec "${app_binary}" "$@"
@@ -0,0 +1,30 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
+ <plist version="1.0">
4
+ <dict>
5
+ <key>CFBundleDevelopmentRegion</key>
6
+ <string>en</string>
7
+ <key>CFBundleExecutable</key>
8
+ <string>OpenComputerUse</string>
9
+ <key>CFBundleIdentifier</key>
10
+ <string>dev.opencodex.OpenComputerUse</string>
11
+ <key>CFBundleInfoDictionaryVersion</key>
12
+ <string>6.0</string>
13
+ <key>CFBundleName</key>
14
+ <string>Open Computer Use</string>
15
+ <key>CFBundleDisplayName</key>
16
+ <string>Open Computer Use</string>
17
+ <key>CFBundlePackageType</key>
18
+ <string>APPL</string>
19
+ <key>CFBundleShortVersionString</key>
20
+ <string>0.1.2</string>
21
+ <key>CFBundleVersion</key>
22
+ <string>16</string>
23
+ <key>LSMinimumSystemVersion</key>
24
+ <string>14.0</string>
25
+ <key>LSUIElement</key>
26
+ <true/>
27
+ <key>NSPrincipalClass</key>
28
+ <string>NSApplication</string>
29
+ </dict>
30
+ </plist>
package/package.json ADDED
@@ -0,0 +1,53 @@
1
+ {
2
+ "name": "open-computer-use-mcp",
3
+ "version": "0.1.2",
4
+ "description": "Prebuilt macOS Computer Use MCP server with Codex plugin installer.",
5
+ "license": "MIT",
6
+ "homepage": "https://github.com/iFurySt/open-codex-computer-use",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "git+https://github.com/iFurySt/open-codex-computer-use.git"
10
+ },
11
+ "bugs": {
12
+ "url": "https://github.com/iFurySt/open-codex-computer-use/issues"
13
+ },
14
+ "keywords": [
15
+ "computer-use",
16
+ "codex",
17
+ "mcp",
18
+ "macos",
19
+ "automation"
20
+ ],
21
+ "os": [
22
+ "darwin"
23
+ ],
24
+ "cpu": [
25
+ "arm64",
26
+ "x64"
27
+ ],
28
+ "preferGlobal": true,
29
+ "publishConfig": {
30
+ "access": "public"
31
+ },
32
+ "bin": {
33
+ "open-computer-use": "./bin/open-computer-use",
34
+ "open-computer-use-mcp": "./bin/open-computer-use-mcp",
35
+ "open-codex-computer-use-mcp": "./bin/open-codex-computer-use-mcp"
36
+ },
37
+ "scripts": {
38
+ "postinstall": "node ./scripts/postinstall.mjs"
39
+ },
40
+ "files": [
41
+ ".agents/plugins/marketplace.json",
42
+ "bin/",
43
+ "dist/OpenComputerUse.app/",
44
+ "plugins/open-computer-use/.codex-plugin/",
45
+ "plugins/open-computer-use/.mcp.json",
46
+ "plugins/open-computer-use/assets/",
47
+ "plugins/open-computer-use/scripts/",
48
+ "scripts/install-codex-plugin.sh",
49
+ "scripts/postinstall.mjs",
50
+ "README.md",
51
+ "LICENSE"
52
+ ]
53
+ }
@@ -0,0 +1,44 @@
1
+ {
2
+ "name": "open-computer-use",
3
+ "version": "0.1.2",
4
+ "description": "Open-source macOS Computer Use MCP server packaged as a Codex plugin.",
5
+ "author": {
6
+ "name": "Leo",
7
+ "url": "https://github.com/iFurySt"
8
+ },
9
+ "homepage": "https://github.com/iFurySt/open-codex-computer-use",
10
+ "repository": "https://github.com/iFurySt/open-codex-computer-use",
11
+ "license": "MIT",
12
+ "keywords": [
13
+ "computer-use",
14
+ "macos",
15
+ "automation",
16
+ "mcp",
17
+ "codex"
18
+ ],
19
+ "mcpServers": "./.mcp.json",
20
+ "interface": {
21
+ "displayName": "Open Computer Use",
22
+ "shortDescription": "Control macOS apps from Codex with the open local server",
23
+ "longDescription": "Open Computer Use packages this repository's open-source macOS automation server as a Codex plugin. It exposes the same nine desktop-control MCP tools through the locally built OpenComputerUse app bundle, with an AX-first and keyboard-first strategy that tries to avoid stealing focus until global pointer input is truly required.",
24
+ "developerName": "Leo",
25
+ "category": "Productivity",
26
+ "capabilities": [
27
+ "Interactive",
28
+ "Read",
29
+ "Write"
30
+ ],
31
+ "websiteURL": "https://github.com/iFurySt/open-codex-computer-use",
32
+ "privacyPolicyURL": "https://github.com/iFurySt/open-codex-computer-use/blob/main/SECURITY.md",
33
+ "termsOfServiceURL": "https://github.com/iFurySt/open-codex-computer-use/blob/main/LICENSE",
34
+ "defaultPrompt": [
35
+ "Inspect the current UI state of this Mac app without stealing focus when possible",
36
+ "Open a new local document with keyboard shortcuts first, then type content without moving my real pointer unless required",
37
+ "Drive the fixture app and verify the nine computer-use tools still behave correctly"
38
+ ],
39
+ "brandColor": "#0E7490",
40
+ "composerIcon": "./assets/open-computer-use-small.svg",
41
+ "logo": "./assets/open-computer-use.svg",
42
+ "screenshots": []
43
+ }
44
+ }
@@ -0,0 +1,8 @@
1
+ {
2
+ "mcpServers": {
3
+ "open-computer-use": {
4
+ "command": "./scripts/launch-open-computer-use.sh",
5
+ "cwd": "."
6
+ }
7
+ }
8
+ }
@@ -0,0 +1,14 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64" role="img" aria-label="Open Computer Use">
2
+ <defs>
3
+ <linearGradient id="bg" x1="0%" y1="0%" x2="100%" y2="100%">
4
+ <stop offset="0%" stop-color="#1FABFC"/>
5
+ <stop offset="100%" stop-color="#F0BDEF"/>
6
+ </linearGradient>
7
+ </defs>
8
+ <rect x="0" y="0" width="64" height="64" fill="url(#bg)"/>
9
+ <g transform="translate(-5.9259 -5.9259) scale(1.1851852)">
10
+ <path d="M18.5 39A18.5 18.5 0 0 1 45.5 22" fill="none" stroke="#FFFFFF" stroke-opacity="0.72" stroke-width="3" stroke-linecap="round"/>
11
+ <path d="M32.25 25.5L32.25 45.25L37.25 40.5L40.25 48.25L44 46.5L41 39.25L48 38Z" fill="#FFFFFF" fill-opacity="0.14"/>
12
+ <path d="M31.5 24.5L31.5 44.25L36.5 39.5L39.5 47.25L43.25 45.5L40.25 38.25L47.25 37Z" fill="#FFFFFF" fill-opacity="0.94" stroke="#FFFFFF" stroke-width="1.5" stroke-linejoin="round"/>
13
+ </g>
14
+ </svg>
@@ -0,0 +1,14 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 256 256" role="img" aria-label="Open Computer Use">
2
+ <defs>
3
+ <linearGradient id="bg" x1="0%" y1="0%" x2="100%" y2="100%">
4
+ <stop offset="0%" stop-color="#1FABFC"/>
5
+ <stop offset="100%" stop-color="#F0BDEF"/>
6
+ </linearGradient>
7
+ </defs>
8
+ <rect x="0" y="0" width="256" height="256" fill="url(#bg)"/>
9
+ <g transform="translate(-23.7037 -23.7037) scale(1.1851852)">
10
+ <path d="M74 156A74 74 0 0 1 182 88" fill="none" stroke="#FFFFFF" stroke-opacity="0.72" stroke-width="12" stroke-linecap="round"/>
11
+ <path d="M129 102L129 181L149 162L161 193L176 186L164 157L192 152Z" fill="#FFFFFF" fill-opacity="0.14"/>
12
+ <path d="M126 98L126 177L146 158L158 189L173 182L161 153L189 148Z" fill="#FFFFFF" fill-opacity="0.94" stroke="#FFFFFF" stroke-width="6" stroke-linejoin="round"/>
13
+ </g>
14
+ </svg>
@@ -0,0 +1,25 @@
1
+ #!/usr/bin/env bash
2
+
3
+ set -euo pipefail
4
+
5
+ plugin_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
6
+ bundled_app_binary="${plugin_root}/OpenComputerUse.app/Contents/MacOS/OpenComputerUse"
7
+ repo_root="$(cd "${plugin_root}/../.." && pwd)"
8
+ repo_app_binary="${repo_root}/dist/OpenComputerUse.app/Contents/MacOS/OpenComputerUse"
9
+
10
+ if [[ -x "${bundled_app_binary}" ]]; then
11
+ cd "${plugin_root}"
12
+ exec "${bundled_app_binary}" mcp
13
+ fi
14
+
15
+ if [[ -x "${repo_app_binary}" ]]; then
16
+ cd "${repo_root}"
17
+ exec "${repo_app_binary}" mcp
18
+ fi
19
+
20
+ echo "open-computer-use could not find a runnable app bundle." >&2
21
+ echo "Checked:" >&2
22
+ echo " - ${bundled_app_binary}" >&2
23
+ echo " - ${repo_app_binary}" >&2
24
+ echo "Run ./scripts/install-codex-plugin.sh to populate the Codex plugin cache." >&2
25
+ exit 1
@@ -0,0 +1,151 @@
1
+ #!/usr/bin/env bash
2
+
3
+ set -euo pipefail
4
+
5
+ repo_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
6
+ codex_home="${CODEX_HOME:-${HOME}/.codex}"
7
+ config_path="${codex_home}/config.toml"
8
+ marketplace_name="open-computer-use-local"
9
+ plugin_name="open-computer-use"
10
+ plugin_source_root="${repo_root}/plugins/${plugin_name}"
11
+ plugin_manifest="${plugin_source_root}/.codex-plugin/plugin.json"
12
+ build_script="${repo_root}/scripts/build-open-computer-use-app.sh"
13
+ configuration="debug"
14
+ rebuild="false"
15
+
16
+ while [[ $# -gt 0 ]]; do
17
+ case "$1" in
18
+ --rebuild)
19
+ rebuild="true"
20
+ shift
21
+ ;;
22
+ --configuration)
23
+ configuration="${2:-}"
24
+ if [[ -z "${configuration}" ]]; then
25
+ echo "--configuration requires a value" >&2
26
+ exit 1
27
+ fi
28
+ shift 2
29
+ ;;
30
+ *)
31
+ echo "Unknown argument: $1" >&2
32
+ echo "Usage: $0 [--rebuild] [--configuration debug|release]" >&2
33
+ exit 1
34
+ ;;
35
+ esac
36
+ done
37
+
38
+ app_binary="${repo_root}/dist/OpenComputerUse.app/Contents/MacOS/OpenComputerUse"
39
+
40
+ if [[ "${rebuild}" == "true" || ! -x "${app_binary}" ]]; then
41
+ if [[ -x "${build_script}" ]]; then
42
+ "${build_script}" "${configuration}"
43
+ else
44
+ echo "Missing runnable app bundle at ${app_binary} and no local build script is available." >&2
45
+ exit 1
46
+ fi
47
+ fi
48
+
49
+ if [[ ! -f "${repo_root}/.agents/plugins/marketplace.json" ]]; then
50
+ echo "Missing ${repo_root}/.agents/plugins/marketplace.json" >&2
51
+ exit 1
52
+ fi
53
+
54
+ if [[ ! -f "${plugin_manifest}" ]]; then
55
+ echo "Missing ${plugin_manifest}" >&2
56
+ exit 1
57
+ fi
58
+
59
+ if [[ ! -x "${app_binary}" ]]; then
60
+ echo "Missing runnable app binary at ${app_binary}" >&2
61
+ exit 1
62
+ fi
63
+
64
+ plugin_version="$(
65
+ python3 - "${plugin_manifest}" <<'PY'
66
+ import json
67
+ import sys
68
+
69
+ with open(sys.argv[1], "r", encoding="utf-8") as fh:
70
+ manifest = json.load(fh)
71
+
72
+ print(manifest["version"])
73
+ PY
74
+ )"
75
+
76
+ if [[ -z "${plugin_version}" ]]; then
77
+ echo "Failed to read plugin version from ${plugin_manifest}" >&2
78
+ exit 1
79
+ fi
80
+
81
+ plugin_cache_root="${codex_home}/plugins/cache/${marketplace_name}/${plugin_name}"
82
+ plugin_install_root="${plugin_cache_root}/${plugin_version}"
83
+
84
+ mkdir -p "${codex_home}" "${plugin_cache_root}"
85
+ rm -rf "${plugin_install_root}"
86
+ mkdir -p "${plugin_install_root}"
87
+
88
+ rsync -a "${plugin_source_root}/" "${plugin_install_root}/"
89
+ rsync -a "${repo_root}/dist/OpenComputerUse.app" "${plugin_install_root}/"
90
+
91
+ python3 - "${config_path}" "${repo_root}" "${marketplace_name}" "${plugin_name}" <<'PY'
92
+ import json
93
+ import re
94
+ import sys
95
+ from pathlib import Path
96
+
97
+
98
+ def section_pattern(header: str) -> re.Pattern[str]:
99
+ return re.compile(rf'(?ms)^\[{re.escape(header)}\]\n.*?(?=^\[|\Z)')
100
+
101
+
102
+ def remove_section(text: str, header: str) -> str:
103
+ return section_pattern(header).sub("", text)
104
+
105
+
106
+ def upsert_section(text: str, header: str, body: str) -> str:
107
+ section = f'[{header}]\n{body.rstrip()}\n'
108
+ pattern = section_pattern(header)
109
+ if pattern.search(text):
110
+ return pattern.sub(section, text, count=1)
111
+
112
+ if text and not text.endswith("\n"):
113
+ text += "\n"
114
+ if text and not text.endswith("\n\n"):
115
+ text += "\n"
116
+ return text + section
117
+
118
+
119
+ config_path = Path(sys.argv[1])
120
+ repo_root = Path(sys.argv[2]).resolve()
121
+ marketplace_name = sys.argv[3]
122
+ plugin_name = sys.argv[4]
123
+
124
+ text = config_path.read_text() if config_path.exists() else ""
125
+
126
+ for header in (
127
+ 'mcp_servers."open-codex-computer-use"',
128
+ 'mcp_servers."open-computer-use"',
129
+ ):
130
+ text = remove_section(text, header)
131
+
132
+ text = upsert_section(
133
+ text,
134
+ f"marketplaces.{marketplace_name}",
135
+ f'source_type = "local"\nsource = {json.dumps(str(repo_root))}',
136
+ )
137
+ text = upsert_section(
138
+ text,
139
+ f'plugins."{plugin_name}@{marketplace_name}"',
140
+ "enabled = true",
141
+ )
142
+
143
+ text = re.sub(r"\n{3,}", "\n\n", text).rstrip() + "\n"
144
+ config_path.write_text(text)
145
+ PY
146
+
147
+ echo "Installed ${plugin_name}@${marketplace_name}"
148
+ echo "Marketplace source: ${repo_root}"
149
+ echo "Plugin cache: ${plugin_install_root}"
150
+ echo "Updated Codex config: ${config_path}"
151
+ echo "Restart Codex to load the plugin marketplace."
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env node
2
+ const lines = [
3
+ "",
4
+ "Installed open-computer-use-mcp.",
5
+ "Commands: open-computer-use, open-computer-use-mcp, open-codex-computer-use-mcp",
6
+ "Start MCP: open-computer-use mcp",
7
+ "Grant permissions / diagnose: open-computer-use doctor",
8
+ "Install into Codex plugin cache: open-computer-use install-codex-plugin",
9
+ "",
10
+ ];
11
+ for (const line of lines) {
12
+ console.log(line);
13
+ }