@remcp/runtime 0.2.46 → 0.2.48
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 +19 -0
- package/README.md +42 -25
- package/package.json +6 -2
- package/src/catalog.mjs +1 -1
- package/src/extended/browser.mjs +592 -0
- package/src/extended/catalog.mjs +564 -0
- package/src/extended/common.mjs +209 -0
- package/src/extended/desktop-linux.mjs +1173 -0
- package/src/extended/desktop-macos.mjs +408 -0
- package/src/extended/desktop-windows.mjs +546 -0
- package/src/extended/desktop.mjs +1313 -0
- package/src/extended/diagnostics.mjs +274 -0
- package/src/extended/documents.mjs +381 -0
- package/src/extended/ocr.mjs +139 -0
- package/src/helpers/wayland-eis-helper.py +450 -0
- package/src/index.mjs +46 -44
- package/src/invoke.mjs +3 -3
- package/src/mcp-v2.mjs +104 -0
- package/src/permissions.mjs +1 -1
- package/src/util.mjs +24 -1
- package/src/wayland-remote-desktop.mjs +654 -0
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,24 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## Unreleased
|
|
4
|
+
|
|
5
|
+
## 0.2.48 — 2026-09-20
|
|
6
|
+
|
|
7
|
+
- Migrate the local stdio runtime to the official `@modelcontextprotocol/server` v2 serving entry while preserving legacy 2025-era client compatibility.
|
|
8
|
+
- Add negotiated MCP `2026-07-28` support, including `server/discover`, cache hints, full structured output validation, and subscription-based `notifications/tools/list_changed` delivery.
|
|
9
|
+
- Keep the legacy `@modelcontextprotocol/sdk` and modern `@modelcontextprotocol/client` packages dev-only so CI continuously proves both protocol eras against the same runtime.
|
|
10
|
+
- Add optional Tesseract-backed OCR inside `computer_snapshot`/`computer_action`, including bounded word/line boxes and HiDPI/multi-monitor coordinate mapping, without adding another MCP tool or production dependency.
|
|
11
|
+
- Added 39 computer-use tools: native desktop/window automation, accessibility UI inspection/actions, browser CDP, diagnostics, and lightweight DOCX/XLSX/PDF operations.
|
|
12
|
+
- Live `tools/list` now advertises only capabilities available on the current operating system and sends `notifications/tools/list_changed` when the capability set changes; `--print-tools` remains the stable full 83-tool release contract.
|
|
13
|
+
- Added high-level `computer_snapshot` and `computer_action` primitives so agents can prefer semantic Accessibility/DOM targets and fall back to coordinates/screenshots only when necessary.
|
|
14
|
+
- Chrome DevTools Protocol endpoints are restricted to loopback addresses. New filesystem/document operations continue through the existing resolved-path allowlist, and launch/service/power operations reuse the runtime command policy.
|
|
15
|
+
- Fixed metadata output truncation once the JSON tool contract exceeded the operating-system pipe buffer by waiting for stdout writes to flush before exit.
|
|
16
|
+
- No browser/document rendering stack was added; the runtime remains dependency-light and uses native OS facilities plus existing qpdf/poppler/zip helpers when available.
|
|
17
|
+
|
|
18
|
+
## 0.2.47 — 2026-09-19
|
|
19
|
+
|
|
20
|
+
- Lockstep release with the ReMCP client. Runtime behavior is unchanged from 0.2.46; the client now recovers from transient HTTP handshake failures and migrates Linux systemd services to a stable launcher independent of nvm/Hermes prefixes.
|
|
21
|
+
|
|
3
22
|
## 0.2.46 — 2026-09-19
|
|
4
23
|
|
|
5
24
|
- Lockstep release with the ReMCP client. Runtime behavior is unchanged from 0.2.45; the client makes all macOS service restarts use a detached launchd handoff so commands initiated from inside the agent cannot terminate their own updater or settings operation.
|
package/README.md
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
# ReMCP local runtime
|
|
2
2
|
|
|
3
3
|
`@remcp/runtime` is the local device runtime for [ReMCP](https://remcp.site). It is an MCP
|
|
4
|
-
server that runs on a computer you paired with ReMCP and executes
|
|
5
|
-
and
|
|
4
|
+
server that runs on a computer you paired with ReMCP and executes file, image, search, terminal,
|
|
5
|
+
process, desktop UI, browser, diagnostics, and document tools exposed through the hosted ReMCP MCP endpoint.
|
|
6
6
|
|
|
7
7
|
The ReMCP device agent starts this runtime as a child process and talks to it over stdio. The runtime
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
has no independent cloud service or telemetry endpoint: browser automation connects only to a loopback
|
|
9
|
+
Chrome DevTools endpoint, while the explicit `network` diagnostic and commands you run can reach the
|
|
10
|
+
network when requested. The device credential remains in the paired agent and can be revoked at any time.
|
|
10
11
|
|
|
11
12
|
## Install
|
|
12
13
|
|
|
@@ -27,8 +28,10 @@ npx @remcp/runtime # MCP server over stdio
|
|
|
27
28
|
|
|
28
29
|
## Tools
|
|
29
30
|
|
|
30
|
-
|
|
31
|
-
|
|
31
|
+
83 tools are implemented in this repository: the original 44 filesystem/search/terminal/process tools
|
|
32
|
+
plus 39 computer-use, browser, diagnostics, and document tools. The release contract contains all 83;
|
|
33
|
+
the live local MCP `tools/list` omits optional platform-specific tools that the current computer cannot
|
|
34
|
+
support and emits `notifications/tools/list_changed` when that capability set changes. The stdio server is dual-era: existing 2025-era clients continue to work unchanged, while clients that negotiate MCP `2026-07-28` use `server/discover`, cache hints, unrestricted structured output validation, and `subscriptions/listen` for list-change delivery.
|
|
32
35
|
|
|
33
36
|
| Area | Tools |
|
|
34
37
|
| --- | --- |
|
|
@@ -41,18 +44,25 @@ executes.
|
|
|
41
44
|
| Search | `start_search`, `get_more_search_results`, `stop_search`, `list_searches` |
|
|
42
45
|
| Processes | `start_process`, `read_process_output`, `wait_for_process_output`, `interact_with_process`, `force_terminate`, `list_sessions`, `list_processes`, `kill_process` |
|
|
43
46
|
| Runtime | `get_system_info`, `get_runtime_info`, `get_runtime_stats`, `set_config_value` |
|
|
47
|
+
| Computer use | `computer_snapshot`, `computer_action`, `list_windows`, `window_action`, `launch_app`, `ui_snapshot`, `ui_find`, `ui_action`, `type_text`, `keyboard`, `pointer`, `drag_drop`, `scroll`, `wait_for_ui`, `clipboard`, `display_inventory`, `screenshot_region`, `open_path`, `reveal_path`, `notification` |
|
|
48
|
+
| Browser | `browser_tabs`, `browser_navigate`, `browser_snapshot`, `browser_find`, `browser_action`, `browser_wait`, `browser_evaluate` |
|
|
49
|
+
| Diagnostics | `service`, `event_log`, `network`, `installed_apps`, `environment`, `audio`, `power_action`, `record_screen` |
|
|
50
|
+
| Documents | `read_document`, `edit_spreadsheet`, `edit_document`, `pdf_action` |
|
|
44
51
|
|
|
45
52
|
The hosted ReMCP endpoint adds eight account/relay tools — `list_devices`, `ping_device`,
|
|
46
53
|
`who_am_i`, `create_pairing_command`, `get_recent_tool_calls`, `get_usage_statistics`,
|
|
47
|
-
`get_configuration`, and `rename_device` — for a
|
|
48
|
-
agent may need, including service management, package installs, git and docker, runs through
|
|
49
|
-
`start_process` with the permissions of the account running the agent.
|
|
54
|
+
`get_configuration`, and `rename_device` — for a 91-tool release contract.
|
|
50
55
|
|
|
51
|
-
`
|
|
56
|
+
`computer_snapshot` and `computer_action` keep OCR inside the compact high-level surface: when a local `tesseract` binary is available, snapshot can return bounded OCR text/boxes and click targeting can fall back through Accessibility → browser DOM/CDP → OCR → coordinates. OCR is optional and never adds another MCP tool or bundled OCR dependency.
|
|
57
|
+
|
|
58
|
+
For frontend QA, use semantic data to operate the page and rendered pixels to verify it: `browser_action(action="set_viewport")` sets an exact responsive-test viewport, `browser_wait` waits for the real application state, and `browser_snapshot(include_screenshot=true, selector=...)` recenters the component, returns its bounds, and attaches the real CDP-rendered viewport PNG. This intentionally treats screenshots as the visual oracle without making screenshot-driven coordinate guessing the primary control path.
|
|
59
|
+
|
|
60
|
+
`set_config_value` remains deliberately narrow: it can change only `telemetryEnabled`,
|
|
52
61
|
`maxReadLines`, `maxBufferedLines`, and `maxOutputBytes`. Access roots, blocked commands,
|
|
53
62
|
the command guardrail, shell, write limit, runtime name, and unrestricted mode stay with the person
|
|
54
|
-
at the computer.
|
|
55
|
-
|
|
63
|
+
at the computer. DOCX/XLSX edits operate directly on OOXML, while structural PDF writes use existing
|
|
64
|
+
system tools such as qpdf/poppler when present; ReMCP still does not bundle Chromium, Puppeteer,
|
|
65
|
+
`sharp`, or `exceljs`.
|
|
56
66
|
|
|
57
67
|
`--print-tools` prints the exact JSON contract (schemas and annotations) the runtime advertises, and
|
|
58
68
|
`src/catalog.mjs` is the single source of truth for it.
|
|
@@ -60,8 +70,14 @@ document tools already installed on your machine.
|
|
|
60
70
|
## No approval staircase
|
|
61
71
|
|
|
62
72
|
ReMCP is a remote control for computers you own, with the same trust model as SSH: the tool call runs,
|
|
63
|
-
and the user's request is the authorization.
|
|
64
|
-
dry-run detour unless you ask for one.
|
|
73
|
+
and the user's request is the authorization. ReMCP adds no per-tool approval prompt, no "are you sure",
|
|
74
|
+
and no dry-run detour unless you ask for one.
|
|
75
|
+
|
|
76
|
+
Operating-system security boundaries still apply. macOS can require Accessibility/Screen Recording grants,
|
|
77
|
+
and GNOME Wayland requires a one-time XDG RemoteDesktop consent before low-level keyboard/pointer input.
|
|
78
|
+
ReMCP does not bypass those controls: after GNOME grants access, the portal restore token is stored locally
|
|
79
|
+
under the runtime config directory with mode `0600` and reused when the portal permits it. Semantic AT-SPI
|
|
80
|
+
UI actions and the XDG Screenshot portal remain separate from that low-level input permission.
|
|
65
81
|
|
|
66
82
|
- file writes replace by default (`mode: "append"` to add), moves and copies replace the destination
|
|
67
83
|
(`overwrite: false` refuses instead), `replace_in_files` applies immediately (`dry_run: true`
|
|
@@ -106,9 +122,10 @@ in `~/.config/remcp/runtime.json`. `--describe` always reports the current state
|
|
|
106
122
|
|
|
107
123
|
## Runtime properties
|
|
108
124
|
|
|
109
|
-
- **No
|
|
110
|
-
|
|
111
|
-
|
|
125
|
+
- **No independent cloud control plane.** Telemetry and device RPC still leave only through the paired
|
|
126
|
+
agent. Browser control accepts only loopback CDP endpoints. The explicit `network` diagnostic can
|
|
127
|
+
open a bounded TCP connection to a host/port, and shell/browser actions can reach the network when
|
|
128
|
+
the requested operation itself requires it.
|
|
112
129
|
- **Optional confinement.** `allowedRoots` is empty by default. When you set it, it is enforced
|
|
113
130
|
against the resolved real path of the deepest existing ancestor rather than the lexical string, so
|
|
114
131
|
`<allowed>/link -> /etc` cannot be used to read or write outside the allowed directories.
|
|
@@ -194,8 +211,8 @@ MCP server.
|
|
|
194
211
|
|
|
195
212
|
| | Desktop Commander 0.2.50 | ReMCP runtime |
|
|
196
213
|
| --- | --- | --- |
|
|
197
|
-
| Tools | 26, including config mutators and document tooling |
|
|
198
|
-
| Runtime dependencies | 34 (Supabase, Puppeteer/md-to-pdf, `sharp`, `exceljs`, Tiptap, ripgrep download) | 2 direct (`@modelcontextprotocol/
|
|
214
|
+
| Tools | 26, including config mutators and document tooling | 83, including filesystem/terminal plus native desktop UI, browser CDP, diagnostics, and lightweight document operations |
|
|
215
|
+
| Runtime dependencies | 34 (Supabase, Puppeteer/md-to-pdf, `sharp`, `exceljs`, Tiptap, ripgrep download) | 2 production-direct (`@modelcontextprotocol/server` v2, `@jellybrick/dbus-next`); legacy/modern clients are dev-only compatibility tests |
|
|
199
216
|
| Install scripts | `postinstall` posts an install payload that ignores the telemetry setting | none |
|
|
200
217
|
| Telemetry | opt-out, 51 event names, remote feature flags, A/B assignment, third-party processor | opt-out, whitelisted event schema, no endpoint, no flags |
|
|
201
218
|
| Package footprint | 3.78 MB unpacked, 249 files | small first-party runtime package; no bundled browser or document-rendering stack |
|
|
@@ -206,12 +223,12 @@ MCP server.
|
|
|
206
223
|
| Images | file preview UI in a specific client | `read_image` returns the image to any MCP client |
|
|
207
224
|
| Termination | session kill only | whole process group, plus runtime supervision and restart |
|
|
208
225
|
|
|
209
|
-
What ReMCP deliberately does not
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
226
|
+
What ReMCP deliberately does not bundle: browser/document rendering stacks such as Puppeteer,
|
|
227
|
+
`sharp`, and `exceljs`. Spreadsheet and DOCX edits use OOXML directly, and PDF structural operations
|
|
228
|
+
use existing system utilities when installed. Unrestricted configuration mutation is intentionally
|
|
229
|
+
absent — `set_config_value` is limited to four non-security preferences, while access roots and
|
|
230
|
+
command security remain local; local usage history would write arguments to disk; URL reads in
|
|
231
|
+
`read_file` remain absent to avoid an implicit SSRF surface.
|
|
215
232
|
|
|
216
233
|
## License
|
|
217
234
|
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@remcp/runtime",
|
|
3
|
-
"version": "0.2.
|
|
4
|
-
"description": "First-party ReMCP local device runtime:
|
|
3
|
+
"version": "0.2.48",
|
|
4
|
+
"description": "First-party ReMCP local device runtime: filesystem, terminal, computer-use, browser, diagnostics and document tools over MCP.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"homepage": "https://remcp.site",
|
|
@@ -25,6 +25,10 @@
|
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
27
|
"@jellybrick/dbus-next": "^0.11.3",
|
|
28
|
+
"@modelcontextprotocol/server": "^2.0.0"
|
|
29
|
+
},
|
|
30
|
+
"devDependencies": {
|
|
31
|
+
"@modelcontextprotocol/client": "^2.0.0",
|
|
28
32
|
"@modelcontextprotocol/sdk": "^1.30.0"
|
|
29
33
|
},
|
|
30
34
|
"repository": {
|
package/src/catalog.mjs
CHANGED
|
@@ -26,7 +26,7 @@ export const toolDefinitions = [
|
|
|
26
26
|
{
|
|
27
27
|
name: 'read_file',
|
|
28
28
|
title: 'Read file',
|
|
29
|
-
description: 'Read a file on this computer:
|
|
29
|
+
description: 'Read a plain text or line-oriented file on this computer: source, config, Markdown, scripts or logs. Use read_document for PDF, DOCX, XLSX and other structured documents. Legacy .docx/.pdf extraction remains supported for compatibility. Use offset and length to page through large text files; a negative offset reads from the end.',
|
|
30
30
|
inputSchema: {
|
|
31
31
|
type: 'object',
|
|
32
32
|
properties: {
|