@remcp/remcp 0.1.0 → 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.
package/README.md CHANGED
@@ -1,71 +1,118 @@
1
1
  # ReMCP
2
2
 
3
- ReMCP is an open-source remote MCP bridge for computers you control. A local agent connects outbound to a ReMCP server and exposes filesystem, search, terminal and process tools through one authenticated remote MCP endpoint.
3
+ ReMCP is an open-source remote MCP bridge for computers you control. A lightweight device agent connects **outbound** to a ReMCP relay, so ChatGPT, Codex, or another MCP client can work with local files, directories, searches, terminal sessions, and processes without exposing an inbound port on the computer.
4
4
 
5
- **Hosted service:** https://remcp.delio24.com
6
- **MCP endpoint:** `https://remcp.delio24.com/mcp`
5
+ - Hosted service: <https://remcp.delio24.com>
6
+ - MCP endpoint: `https://remcp.delio24.com/mcp`
7
+ - npm: `@remcp/remcp`
8
+ - License: MIT
7
9
 
8
- ## How it works
10
+ ## Quick start
9
11
 
10
- ```text
11
- ChatGPT / MCP client ── OAuth + HTTPS ──> ReMCP server
12
-
13
- ├── WSS ──> laptop agent ──> local MCP
14
- └── WSS ──> server agent ──> local MCP
12
+ Requires Node.js 22.5 or newer.
13
+
14
+ 1. Sign in at <https://remcp.delio24.com> and generate a one-time pairing command.
15
+ 2. Run it on the computer you want to connect:
16
+
17
+ ```bash
18
+ npx --yes @remcp/remcp@latest connect \
19
+ --server https://remcp.delio24.com \
20
+ --code YOUR_PAIRING_CODE \
21
+ --install
15
22
  ```
16
23
 
17
- The central service stores account/device metadata, hashed reusable credentials and OAuth state. Actual filesystem and process access stays on the paired computer.
24
+ 3. Verify the persistent agent:
18
25
 
19
- ## Install
26
+ ```bash
27
+ remcp --version
28
+ remcp status
29
+ ```
20
30
 
21
- Requires Node.js 22.5 or newer.
31
+ 4. Add the MCP endpoint to your client:
32
+
33
+ ```text
34
+ https://remcp.delio24.com/mcp
35
+ ```
36
+
37
+ Authentication uses OAuth authorization code + PKCE with rotating refresh credentials.
38
+
39
+ ## Update
22
40
 
23
41
  ```bash
24
- npx @remcp/remcp connect --server https://remcp.delio24.com --code YOUR_PAIRING_CODE --install
42
+ remcp update
25
43
  ```
26
44
 
27
- Generate the one-time pairing code after signing in at https://remcp.delio24.com.
45
+ `remcp update` refreshes the global CLI and compatible local runtime, then restarts the installed user service.
46
+
28
47
  ## CLI
29
48
 
30
49
  ```text
31
- remcp connect Pair this computer with a ReMCP server
32
- remcp start Run the device agent in the foreground
33
- remcp status Check the saved configuration and server
34
- remcp install Install the user service where supported
35
- remcp uninstall Remove the installed user service
50
+ remcp start Run the device agent in the foreground
51
+ remcp status Show version, pairing and server health
52
+ remcp doctor Alias for status
53
+ remcp update Update ReMCP and restart the user service
54
+ remcp install Install or repair the user service
55
+ remcp uninstall Remove the user service
56
+ remcp uninstall --purge Remove the service and global ReMCP packages
57
+ remcp --version Print the installed CLI version
36
58
  ```
37
59
 
38
- ## Self-host the server
60
+ ## Architecture
39
61
 
40
- ```bash
41
- git clone https://github.com/antonbaider/remcp.git
42
- cd remcp
43
- cp .env.example .env
44
- # Fill in your public URL and Firebase Web App configuration.
45
- docker compose up -d --build
62
+ ```text
63
+ ChatGPT / Codex / MCP client
64
+
65
+ OAuth 2.1 + HTTPS
66
+
67
+ ReMCP relay /mcp
68
+
69
+ │ authenticated WSS (outbound from device)
70
+
71
+ paired computer
72
+
73
+ └── local file / search / terminal / process runtime
46
74
  ```
47
75
 
48
- Put a TLS reverse proxy in front of ReMCP and proxy WebSocket upgrades for `/agent`. The example Compose file binds the application to localhost by default. Do not publish the internal application port directly unless you have deliberately secured it.
76
+ The hosted relay stores account/device metadata, one-way hashes of reusable credentials, OAuth client metadata, and refresh-token hashes. Device credentials are independently revocable. MCP sessions are scoped to the authenticated ReMCP account.
77
+
78
+ ## OpenAI Plugin package
49
79
 
50
- ReMCP does **not** require a Firebase Admin service-account private key. Firebase ID tokens are verified using Google's public signing keys.
80
+ The repository is prepared for the current OpenAI Plugins format:
51
81
 
52
- ## ChatGPT / remote MCP
82
+ - `plugin.json` portable Agent Plugins manifest;
83
+ - `mcp.json` — production Streamable HTTP MCP configuration;
84
+ - `skills/remcp-operator/SKILL.md` — bundled operator skill;
85
+ - `assets/remcp-icon.png` — plugin icon;
86
+ - `docs/OPENAI_PLUGIN.md` — submission and reviewer checklist;
87
+ - `submission/openai-plugin-review.json` — generated tool annotations plus five positive and three negative review cases.
53
88
 
54
- ReMCP exposes Streamable HTTP MCP at `/mcp`. Authentication uses authorization code + PKCE, Dynamic Client Registration, short-lived access tokens and rotating refresh tokens.
89
+ ReMCP has no plugin UI, so the public submission should not include UI screenshots. The remote MCP server uses a universal production URL and OAuth. See [`docs/OPENAI_PLUGIN.md`](docs/OPENAI_PLUGIN.md) before submitting.
55
90
 
56
- The repository includes `chatgpt-app-submission.json` plus a reusable ReMCP operator skill for submission/testing workflows.
57
91
  ## Security model
58
92
 
59
- - one independent credential per paired device;
60
- - device and refresh credentials are stored as one-way hashes server-side;
93
+ - no inbound port is required on paired computers;
94
+ - one revocable credential is issued per paired device;
95
+ - reusable credentials are hashed server-side;
61
96
  - pairing codes are short-lived and single-use;
62
- - MCP sessions are bound to the authenticated account;
63
- - the device agent connects outbound over WSS;
64
- - write/process tools expose explicit MCP risk annotations;
65
- - the public review sandbox is isolated per authenticated user and intentionally limits terminal commands;
66
- - central Docker deployment runs read-only with dropped Linux capabilities in the supplied Compose configuration.
97
+ - OAuth uses PKCE and rotating refresh credentials;
98
+ - OAuth metadata advertises `openid` and `email`, with a UserInfo endpoint for verified-email workspace restrictions;
99
+ - MCP tools carry explicit `readOnlyHint`, `openWorldHint`, and `destructiveHint` annotations;
100
+ - the public review fixture is isolated per authenticated account and intentionally restricts terminal commands;
101
+ - the supplied server container runs read-only with dropped Linux capabilities.
102
+
103
+ ReMCP tools should not be used to request or process passwords, MFA codes, API/private keys, payment-card data, protected health information, or government identifiers. See [`SECURITY.md`](SECURITY.md) and the hosted <https://remcp.delio24.com/security> page.
104
+
105
+ ## Self-hosting
106
+
107
+ ```bash
108
+ git clone https://github.com/antonbaider/remcp.git
109
+ cd remcp
110
+ cp .env.example .env
111
+ # Fill in your public URL and Firebase Web App configuration.
112
+ docker compose up -d --build
113
+ ```
67
114
 
68
- See https://remcp.delio24.com/security for the hosted-service security overview.
115
+ Put a TLS reverse proxy in front of ReMCP and proxy WebSocket upgrades for `/agent`. The supplied Compose configuration binds the application to localhost by default. ReMCP verifies Firebase ID tokens using Google's public signing keys and does not require a Firebase Admin private key.
69
116
 
70
117
  ## Development
71
118
 
@@ -74,10 +121,25 @@ npm ci
74
121
  npm run check
75
122
  npm test
76
123
  npm audit --omit=dev
124
+ npm pack --dry-run
77
125
  ```
78
126
 
79
- ## License
127
+ For server changes:
128
+
129
+ ```bash
130
+ docker build -t remcp:test .
131
+ ```
132
+
133
+ See [`CONTRIBUTING.md`](CONTRIBUTING.md) for contribution and security rules.
134
+
135
+ ## Project docs
80
136
 
81
- ReMCP is MIT licensed. `@wonderwhy-er/desktop-commander` is a separate MIT-licensed dependency; its notices are preserved in `THIRD_PARTY_NOTICES.md`.
137
+ - [`docs/OPENAI_PLUGIN.md`](docs/OPENAI_PLUGIN.md) OpenAI Plugins submission
138
+ - [`SECURITY.md`](SECURITY.md) — vulnerability reporting and operational security
139
+ - [`CONTRIBUTING.md`](CONTRIBUTING.md) — development checks
140
+ - [`CHANGELOG.md`](CHANGELOG.md) — release notes
141
+ - [`THIRD_PARTY_NOTICES.md`](THIRD_PARTY_NOTICES.md) — third-party license notices
142
+
143
+ ## License
82
144
 
83
- ReMCP does not require or depend on the proprietary Remote Desktop Commander hosted relay service.
145
+ ReMCP is MIT licensed. Third-party notices for the local device runtime are preserved in `THIRD_PARTY_NOTICES.md`.
Binary file
package/mcp.json ADDED
@@ -0,0 +1,9 @@
1
+ {
2
+ "$schema": "https://agent-plugins.org/schemas/1.0.0/mcp.schema.json",
3
+ "mcpServers": {
4
+ "remcp": {
5
+ "type": "streamable-http",
6
+ "url": "https://remcp.delio24.com/mcp"
7
+ }
8
+ }
9
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@remcp/remcp",
3
- "version": "0.1.0",
3
+ "version": "0.1.2",
4
4
  "description": "Self-hosted remote MCP bridge for securely controlling your own computers from MCP clients.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -15,8 +15,10 @@
15
15
  "bin",
16
16
  "src",
17
17
  "public",
18
+ "plugin.json",
19
+ "mcp.json",
20
+ "assets",
18
21
  "skills/remcp-operator",
19
- "chatgpt-app-submission.json",
20
22
  "LICENSE",
21
23
  "THIRD_PARTY_NOTICES.md",
22
24
  "README.md"
@@ -30,7 +32,6 @@
30
32
  },
31
33
  "dependencies": {
32
34
  "@modelcontextprotocol/sdk": "^1.30.0",
33
- "@wonderwhy-er/desktop-commander": "^0.2.50",
34
35
  "express": "^5.2.1",
35
36
  "express-rate-limit": "^8.7.0",
36
37
  "helmet": "^8.3.0",
package/plugin.json ADDED
@@ -0,0 +1,37 @@
1
+ {
2
+ "$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
3
+ "name": "remcp",
4
+ "version": "0.1.2",
5
+ "description": "Securely use files, directories, searches, terminal sessions, and processes on computers you have paired with ReMCP.",
6
+ "homepage": "https://remcp.delio24.com",
7
+ "repository": "https://github.com/antonbaider/remcp",
8
+ "license": "MIT",
9
+ "keywords": [
10
+ "mcp",
11
+ "remote-computer",
12
+ "developer-tools",
13
+ "files",
14
+ "terminal"
15
+ ],
16
+ "extensions": {
17
+ "com.openai": {
18
+ "interface": {
19
+ "displayName": "ReMCP",
20
+ "shortDescription": "Use your paired computers through MCP.",
21
+ "longDescription": "ReMCP securely connects ChatGPT and Codex to computers you have explicitly paired. Inspect files and directories, search local content, and manage terminal sessions and processes through an authenticated remote MCP endpoint.",
22
+ "category": "Developer Tools",
23
+ "websiteURL": "https://remcp.delio24.com",
24
+ "privacyPolicyURL": "https://remcp.delio24.com/privacy",
25
+ "termsOfServiceURL": "https://remcp.delio24.com/terms",
26
+ "defaultPrompt": [
27
+ "Show my paired ReMCP computers and tell me which ones are online.",
28
+ "On my laptop, list the files in my project folder and summarize what is there without changing anything.",
29
+ "On my server, list the running processes and help me identify the one using the most memory."
30
+ ],
31
+ "brandColor": "#4C50D8",
32
+ "composerIcon": "./assets/remcp-icon.png",
33
+ "logo": "./assets/remcp-icon.png"
34
+ }
35
+ }
36
+ }
37
+ }
@@ -8,7 +8,7 @@
8
8
  <title>Authorize · ReMCP</title>
9
9
  <meta name="description" content="Authorize an MCP client to access computers paired to your ReMCP account.">
10
10
  <link rel="preconnect" href="https://www.gstatic.com" crossorigin>
11
- <link rel="stylesheet" href="/style.css?v=b92ac4c9219a">
11
+ <link rel="stylesheet" href="/style.css?v=remcp-012">
12
12
  <meta property="og:site_name" content="ReMCP">
13
13
  <meta property="og:image" content="https://remcp.delio24.com/assets/og-remcp.png">
14
14
  <link rel="icon" href="/favicon.ico" sizes="any">
@@ -28,7 +28,7 @@
28
28
  <img class="brand-mark" src="/android-chrome-192x192.png" width="30" height="30" alt="" aria-hidden="true">
29
29
  <span translate="no">ReMCP</span>
30
30
  </a>
31
- <nav aria-label="Primary"><a href="/docs">Docs</a><a href="/security">Security</a><a href="/support">Support</a></nav>
31
+ <nav aria-label="Primary"><a href="/docs">Docs</a><a href="/docs#install">Install</a><a href="/docs#update">Update</a><a href="/security">Security</a><a href="/support">Support</a></nav>
32
32
  </header>
33
33
  <main id="oauth-main" class="oauth-shell">
34
34
  <section class="oauth-card">
@@ -56,13 +56,13 @@
56
56
  <p class="eyebrow">Access request</p>
57
57
  <h2>Authorize ReMCP Access</h2>
58
58
  <p class="muted">This MCP client is requesting access to operate computers paired to this ReMCP account.</p>
59
- <ul class="scope-list"><li><span>Control paired devices</span><strong>remcp:control</strong></li><li><span>Maintain the authorized connection</span><strong>offline_access</strong></li></ul>
59
+ <ul class="scope-list"><li><span>Identify your ReMCP account</span><strong>openid</strong></li><li><span>Share your verified email for workspace access rules</span><strong>email</strong></li><li><span>Control paired devices</span><strong>remcp:control</strong></li><li><span>Maintain the authorized connection</span><strong>offline_access</strong></li></ul>
60
60
  <p class="oauth-meta">Client: <span id="client-id"></span></p>
61
61
  <div class="oauth-actions"><button id="authorize" class="button" type="button">Authorize ReMCP Access</button><a class="button ghost" href="/">Not Now</a></div>
62
62
  </div>
63
63
  <p id="status" class="muted" aria-live="polite"></p>
64
64
  <p id="error" class="error" role="alert" aria-live="assertive"></p>
65
- <p class="footer-mini"><a href="/privacy">Privacy</a> · <a href="/terms">Terms</a> · <a href="/security">Security</a></p>
65
+ <p class="footer-mini"><a href="/docs">Docs</a> · <a href="/docs#install">Install</a> · <a href="/docs#update">Update</a> · <a href="/security">Security</a> · <a href="/privacy">Privacy</a> · <a href="/terms">Terms</a></p>
66
66
  </section>
67
67
  </main>
68
68
  <script type="module" src="/oauth-app.js?v=36155fefb47e"></script>
package/public/copy.js ADDED
@@ -0,0 +1,49 @@
1
+ function legacyCopy(text) {
2
+ const input = document.createElement('textarea');
3
+ input.value = text;
4
+ input.setAttribute('readonly', '');
5
+ input.style.position = 'fixed';
6
+ input.style.inset = '0 auto auto -9999px';
7
+ document.body.append(input);
8
+ input.select();
9
+ input.setSelectionRange(0, input.value.length);
10
+ const copied = document.execCommand('copy');
11
+ input.remove();
12
+ if (!copied) throw new Error('Clipboard write failed');
13
+ }
14
+
15
+ async function copyText(text) {
16
+ if (window.isSecureContext && navigator.clipboard?.writeText) {
17
+ try {
18
+ await navigator.clipboard.writeText(text);
19
+ return;
20
+ } catch {
21
+ legacyCopy(text);
22
+ return;
23
+ }
24
+ }
25
+ legacyCopy(text);
26
+ }
27
+
28
+ document.addEventListener('click', async event => {
29
+ const button = event.target.closest('[data-copy]');
30
+ if (!button) return;
31
+ const target = document.querySelector(button.dataset.copy);
32
+ if (!target) return;
33
+
34
+ const original = button.textContent;
35
+ const originalLabel = button.getAttribute('aria-label') || 'Copy command';
36
+ try {
37
+ await copyText(target.textContent.trim());
38
+ button.textContent = 'Copied';
39
+ button.setAttribute('aria-label', 'Copied to clipboard');
40
+ } catch {
41
+ button.textContent = 'Copy failed';
42
+ button.setAttribute('aria-label', 'Copy failed. Select the command manually.');
43
+ }
44
+
45
+ window.setTimeout(() => {
46
+ button.textContent = original;
47
+ button.setAttribute('aria-label', originalLabel);
48
+ }, 1400);
49
+ });
package/public/docs.html CHANGED
@@ -8,7 +8,7 @@
8
8
  <title>Docs · ReMCP</title>
9
9
  <meta name="description" content="Connect a computer to ReMCP and configure the hosted MCP endpoint.">
10
10
  <link rel="preconnect" href="https://www.gstatic.com" crossorigin>
11
- <link rel="stylesheet" href="/style.css?v=b92ac4c9219a">
11
+ <link rel="stylesheet" href="/style.css?v=remcp-012">
12
12
  <meta property="og:site_name" content="ReMCP">
13
13
  <meta property="og:image" content="https://remcp.delio24.com/assets/og-remcp.png">
14
14
  <link rel="icon" href="/favicon.ico" sizes="any">
@@ -28,20 +28,57 @@
28
28
  <img class="brand-mark" src="/android-chrome-192x192.png" width="30" height="30" alt="" aria-hidden="true">
29
29
  <span translate="no">ReMCP</span>
30
30
  </a>
31
- <nav aria-label="Primary"><a href="/docs" aria-current="page">Docs</a><a href="/security">Security</a><a href="/support">Support</a></nav>
31
+ <nav aria-label="Primary"><a href="/docs" aria-current="page">Docs</a><a href="/docs#install">Install</a><a href="/docs#update">Update</a><a href="/security">Security</a><a href="/support">Support</a></nav>
32
32
  </header>
33
33
  <main id="main" class="doc-shell">
34
- <aside class="doc-nav" aria-label="Documentation"><a href="/docs" aria-current="page">Setup</a><a href="/security">Security</a><a href="/support">Support</a><a href="/privacy">Privacy</a><a href="/terms">Terms</a></aside>
34
+ <aside class="doc-nav" aria-label="Documentation"><a href="/docs" aria-current="page">Setup</a><a href="/docs#install">Install</a><a href="/docs#update">Update</a><a href="/security">Security</a><a href="/support">Support</a><a href="/privacy">Privacy</a><a href="/terms">Terms</a></aside>
35
35
  <article class="prose">
36
36
  <p class="eyebrow">Documentation</p>
37
- <h1>Connect a computer to ReMCP.</h1>
38
- <p>ReMCP is a remote MCP relay. The hosted server authenticates the MCP client and routes each tool call to a paired local agent.</p>
39
- <h2>1. Sign in</h2><p>Open <a href="/">the ReMCP workspace</a> and authenticate. Generate a one-time pairing command from the device section.</p>
40
- <h2>2. Pair the computer</h2><pre><code>npx @remcp/remcp connect --server https://remcp.delio24.com --code YOUR_CODE --install</code></pre><p>The code is exchanged for a device-specific credential that can later be revoked.</p>
41
- <h2>3. Add the MCP server</h2><pre><code>https://remcp.delio24.com/mcp</code></pre><p>Choose OAuth when your MCP client asks for authentication. ReMCP uses authorization code flow with PKCE and refresh tokens.</p>
42
- <h2>Connection model</h2><p>The device agent creates an outbound secure WebSocket connection to the relay. You do not need to expose a listener on the computer.</p>
43
- <div class="notice"><strong>Review mutating actions.</strong><p>Some tools can write files or run processes. Review the action requested by your MCP client before approving it.</p></div>
44
- <h2>Self-hosting</h2><p>The central ReMCP service runs in Docker with persistent account, device and OAuth metadata. Device agents run natively so host access does not require a privileged container.</p>
37
+ <h1>Install, pair and keep ReMCP updated.</h1>
38
+ <p>Use <code>npx</code> once to pair a computer. With <code>--install</code>, ReMCP creates a persistent global CLI and a user service, so normal operation no longer depends on the temporary npx cache.</p>
39
+
40
+ <h2 id="requirements">1. Requirements</h2>
41
+ <p>Install Node.js 22.5 or newer. The computer needs outbound HTTPS/WSS access to <code>remcp.delio24.com</code>; no inbound device port is required.</p>
42
+
43
+ <h2 id="pair">2. Get a pairing code</h2>
44
+ <p>Open <a href="/#connect">the ReMCP workspace</a>, sign in, and choose <strong>Generate Command</strong>. Pairing codes are short-lived and single-use.</p>
45
+
46
+ <h2 id="install">3. Install and pair</h2>
47
+ <div class="code-row"><pre><code id="docs-command-1">npx --yes @remcp/remcp@latest connect --server https://remcp.delio24.com --code YOUR_CODE --install</code></pre><button class="copy-button code-copy" type="button" data-copy="#docs-command-1" aria-label="Copy command" aria-live="polite">Copy</button></div>
48
+ <p>This stores a device-specific credential locally, installs the persistent <code>remcp</code> CLI, installs the compatible local device runtime, and starts the ReMCP user service.</p>
49
+
50
+ <h3>Verify the installation</h3>
51
+ <div class="code-row"><pre><code id="docs-command-2">remcp --version
52
+ remcp status</code></pre><button class="copy-button code-copy" type="button" data-copy="#docs-command-2" aria-label="Copy command" aria-live="polite">Copy</button></div>
53
+ <p><code>status</code> shows the installed CLI version, paired device id, server URL and server health.</p>
54
+
55
+ <h2 id="mcp">4. Add the MCP endpoint</h2>
56
+ <div class="code-row"><pre><code id="docs-command-3">https://remcp.delio24.com/mcp</code></pre><button class="copy-button code-copy" type="button" data-copy="#docs-command-3" aria-label="Copy MCP endpoint" aria-live="polite">Copy</button></div>
57
+ <p>Choose OAuth when your MCP client asks for authentication. ReMCP uses authorization code flow with PKCE and refresh tokens.</p>
58
+
59
+ <h2 id="update">Update ReMCP</h2>
60
+ <div class="code-row"><pre><code id="docs-command-4">remcp update</code></pre><button class="copy-button code-copy" type="button" data-copy="#docs-command-4" aria-label="Copy command" aria-live="polite">Copy</button></div>
61
+ <p>The update command installs the latest published ReMCP CLI, refreshes the compatible local runtime, and restarts the user service when it is installed. Verify afterwards with <code>remcp --version</code> or <code>remcp status</code>.</p>
62
+
63
+ <h2 id="service">Service commands</h2>
64
+ <div class="code-row"><pre><code id="docs-command-5">remcp status
65
+ remcp doctor
66
+ remcp install
67
+ remcp start</code></pre><button class="copy-button code-copy" type="button" data-copy="#docs-command-5" aria-label="Copy command" aria-live="polite">Copy</button></div>
68
+ <p><code>start</code> runs the agent in the foreground. <code>install</code> repairs or reinstalls the persistent user service for an already paired computer.</p>
69
+
70
+ <h2 id="uninstall">Uninstall</h2>
71
+ <div class="code-row"><pre><code id="docs-command-6">remcp uninstall</code></pre><button class="copy-button code-copy" type="button" data-copy="#docs-command-6" aria-label="Copy command" aria-live="polite">Copy</button></div>
72
+ <p>This stops and removes the background user service but keeps the CLI and local pairing configuration.</p>
73
+ <div class="code-row"><pre><code id="docs-command-7">remcp uninstall --purge</code></pre><button class="copy-button code-copy" type="button" data-copy="#docs-command-7" aria-label="Copy command" aria-live="polite">Copy</button></div>
74
+ <p><code>--purge</code> also removes the globally installed ReMCP packages. The local pairing configuration remains in <code>~/.config/remcp</code> so it is not silently destroyed.</p>
75
+
76
+ <h2 id="connection-model">Connection model</h2>
77
+ <p>The device agent creates an outbound secure WebSocket connection to the relay. You do not need to expose a listener on the computer.</p>
78
+ <div class="notice"><strong>Review mutating actions.</strong><p>Some tools can write files or run processes. Review the action requested by your MCP client before approving it.</p></div>
79
+
80
+ <h2 id="self-hosting">Self-hosting</h2>
81
+ <p>The central ReMCP service runs in Docker with persistent account, device and OAuth metadata. Device agents run natively so host access does not require a privileged container.</p>
45
82
  </article>
46
83
  </main>
47
84
  <footer class="site-footer">
@@ -49,10 +86,9 @@
49
86
  <img class="brand-mark" src="/android-chrome-192x192.png" width="30" height="30" alt="" aria-hidden="true">
50
87
  <span translate="no">ReMCP</span>
51
88
  </div>
52
- <nav aria-label="Footer">
53
- <a href="/docs">Docs</a><a href="/security">Security</a><a href="/support">Support</a><a href="/privacy">Privacy</a><a href="/terms">Terms</a>
54
- </nav>
89
+ <nav aria-label="Footer"><a href="/docs">Docs</a><a href="/docs#install">Install</a><a href="/docs#update">Update</a><a href="/security">Security</a><a href="/support">Support</a><a href="/privacy">Privacy</a><a href="/terms">Terms</a></nav>
55
90
  <p>Open-source remote MCP infrastructure.</p>
56
91
  </footer>
92
+ <script type="module" src="/copy.js?v=remcp-012"></script>
57
93
  </body>
58
94
  </html>
package/public/index.html CHANGED
@@ -8,7 +8,7 @@
8
8
  <title>ReMCP — Your computers over MCP</title>
9
9
  <meta name="description" content="Securely pair your own computers and use their files, terminal and processes through authenticated MCP clients.">
10
10
  <link rel="preconnect" href="https://www.gstatic.com" crossorigin>
11
- <link rel="stylesheet" href="/style.css?v=b92ac4c9219a">
11
+ <link rel="stylesheet" href="/style.css?v=remcp-012">
12
12
  <meta property="og:site_name" content="ReMCP">
13
13
  <meta property="og:image" content="https://remcp.delio24.com/assets/og-remcp.png">
14
14
  <link rel="icon" href="/favicon.ico" sizes="any">
@@ -28,7 +28,7 @@
28
28
  <img class="brand-mark" src="/android-chrome-192x192.png" width="30" height="30" alt="" aria-hidden="true">
29
29
  <span translate="no">ReMCP</span>
30
30
  </a>
31
- <nav aria-label="Primary"><a href="/docs">Docs</a><a href="/security">Security</a><a href="/support">Support</a></nav>
31
+ <nav aria-label="Primary"><a href="/docs">Docs</a><a href="/docs#install">Install</a><a href="/docs#update">Update</a><a href="/security">Security</a><a href="/support">Support</a></nav>
32
32
  </header>
33
33
  <main id="main">
34
34
  <section class="hero">
@@ -56,6 +56,32 @@
56
56
  <div><span>03</span><h2>Explicit control</h2><p>Read, write and destructive tools declare their behavior so MCP clients can apply the right review flow.</p></div>
57
57
  </section>
58
58
 
59
+ <section id="install" class="quickstart">
60
+ <div class="section-heading">
61
+ <p class="eyebrow">Quick start</p>
62
+ <h2>One command to pair. One command to update.</h2>
63
+ <p>Use npx only for the first pairing. <code>--install</code> creates a persistent <code>remcp</code> CLI and background user service.</p>
64
+ </div>
65
+ <div class="quickstart-grid">
66
+ <article class="command-card">
67
+ <span>01</span><h3>Install &amp; pair</h3>
68
+ <div class="command-row"><code id="install-command">npx --yes @remcp/remcp@latest connect --server https://remcp.delio24.com --code YOUR_CODE --install</code><button class="copy-button" type="button" data-copy="#install-command">Copy</button></div>
69
+ <p>Generate <code>YOUR_CODE</code> in the workspace below.</p>
70
+ </article>
71
+ <article class="command-card">
72
+ <span>02</span><h3>Check</h3>
73
+ <div class="command-row"><code id="status-command">remcp status</code><button class="copy-button" type="button" data-copy="#status-command">Copy</button></div>
74
+ <p>Confirm the local CLI version, pairing and server health.</p>
75
+ </article>
76
+ <article id="update" class="command-card">
77
+ <span>03</span><h3>Update</h3>
78
+ <div class="command-row"><code id="update-command">remcp update</code><button class="copy-button" type="button" data-copy="#update-command">Copy</button></div>
79
+ <p>Updates the CLI and restarts the installed user service.</p>
80
+ </article>
81
+ </div>
82
+ <a class="text-link" href="/docs">Full installation and CLI guide <span aria-hidden="true">→</span></a>
83
+ </section>
84
+
59
85
  <section id="connect" class="workspace">
60
86
  <div class="section-heading">
61
87
  <p class="eyebrow">Workspace</p>
@@ -120,9 +146,7 @@
120
146
  <img class="brand-mark" src="/android-chrome-192x192.png" width="30" height="30" alt="" aria-hidden="true">
121
147
  <span translate="no">ReMCP</span>
122
148
  </div>
123
- <nav aria-label="Footer">
124
- <a href="/docs">Docs</a><a href="/security">Security</a><a href="/support">Support</a><a href="/privacy">Privacy</a><a href="/terms">Terms</a>
125
- </nav>
149
+ <nav aria-label="Footer"><a href="/docs">Docs</a><a href="/docs#install">Install</a><a href="/docs#update">Update</a><a href="/security">Security</a><a href="/support">Support</a><a href="/privacy">Privacy</a><a href="/terms">Terms</a></nav>
126
150
  <p>Open-source remote MCP infrastructure.</p>
127
151
  </footer>
128
152
  <script type="module" src="/app.js?v=14a728f07dd1"></script>
@@ -8,7 +8,7 @@
8
8
  <title>Privacy Policy · ReMCP</title>
9
9
  <meta name="description" content="How ReMCP processes account, device, OAuth and remote-computer data.">
10
10
  <link rel="preconnect" href="https://www.gstatic.com" crossorigin>
11
- <link rel="stylesheet" href="/style.css?v=b92ac4c9219a">
11
+ <link rel="stylesheet" href="/style.css?v=remcp-012">
12
12
  <meta property="og:site_name" content="ReMCP">
13
13
  <meta property="og:image" content="https://remcp.delio24.com/assets/og-remcp.png">
14
14
  <link rel="icon" href="/favicon.ico" sizes="any">
@@ -28,10 +28,10 @@
28
28
  <img class="brand-mark" src="/android-chrome-192x192.png" width="30" height="30" alt="" aria-hidden="true">
29
29
  <span translate="no">ReMCP</span>
30
30
  </a>
31
- <nav aria-label="Primary"><a href="/docs">Docs</a><a href="/security">Security</a><a href="/support">Support</a></nav>
31
+ <nav aria-label="Primary"><a href="/docs">Docs</a><a href="/docs#install">Install</a><a href="/docs#update">Update</a><a href="/security">Security</a><a href="/support">Support</a></nav>
32
32
  </header>
33
33
  <main id="main" class="doc-shell">
34
- <aside class="doc-nav" aria-label="Legal and policy navigation"><a href="/docs">Setup</a><a href="/security">Security</a><a href="/support">Support</a><a href="/privacy" aria-current="page">Privacy</a><a href="/terms">Terms</a></aside>
34
+ <aside class="doc-nav" aria-label="Documentation"><a href="/docs">Setup</a><a href="/docs#install">Install</a><a href="/docs#update">Update</a><a href="/security">Security</a><a href="/support">Support</a><a href="/privacy" aria-current="page">Privacy</a><a href="/terms">Terms</a></aside>
35
35
  <article class="prose">
36
36
  <p class="eyebrow">Privacy</p>
37
37
  <h1>Privacy Policy</h1>
@@ -41,7 +41,8 @@
41
41
  <h2>Device and security metadata</h2><p>ReMCP stores device identifiers, device names and basic platform metadata, one-way hashes of device credentials, pairing records, OAuth client metadata, and one-way hashes of refresh credentials. Pairing codes are short-lived and single-use. Raw device credentials are returned to the paired device and are not stored in plaintext by the service.</p>
42
42
  <h2>Files, commands and tool results</h2><p>When you use an MCP tool, its request and response may pass through the ReMCP relay. This can include filenames, file contents, command output and process information that you explicitly ask the paired computer to process. ReMCP does not intentionally retain those tool payloads as product data. Operational security logs may retain limited metadata such as timestamps, status codes and errors.</p>
43
43
  <h2>How data is used and shared</h2><p>Data is used to provide authentication, device pairing, OAuth authorization, request routing, abuse prevention, security and reliability. ReMCP does not sell personal information and does not serve advertising. Data may be processed by infrastructure and authentication providers only as needed to operate the service, including Firebase/Google for authentication.</p>
44
- <h2>Retention and control</h2><p>Device records remain until revoked or removed. OAuth grants remain until revoked, expired or rotated. Security and operational metadata may be retained for a limited period appropriate to troubleshooting and abuse prevention. You can revoke a paired device from the ReMCP workspace. Requests concerning account data or deletion can be made through the support channel identified on the Support page or in the app listing.</p>
44
+ <h2>Retention and control</h2><p>Pairing codes expire after 10 minutes by default. MCP access tokens expire after 1 hour by default. Refresh credentials expire after 30 days by default and are rotated on use. Device records remain until you revoke or remove the device. ReMCP does not intentionally retain MCP tool request or response payloads as product data. Hosted Nginx access and error logs are rotated daily with 14 rotated copies. Application container logs are size-bounded to three files of at most 50 MB each rather than retained for a fixed number of days. These operational logs are used only for security, reliability, and troubleshooting and are not intended to contain authentication secrets or MCP tool payloads. You can revoke a paired device from the ReMCP workspace, and account-data or deletion requests can be made through the Support page.</p>
45
+ <h2>Restricted data</h2><p>ReMCP is not intended to collect or process passwords, MFA or OTP codes, API or private keys, payment-card data, protected health information, or government identifiers through plugin tool calls. Users should keep those data out of ReMCP requests and use a safer local workflow when a requested file or command would expose them.</p>
45
46
  <h2>Security and international processing</h2><p>ReMCP uses TLS for network transport, hashes reusable credentials before storage, and scopes device access to the authenticated account. Internet services may process data in more than one country depending on infrastructure and authentication providers. See the <a href="/security">Security page</a> for the current security model.</p>
46
47
  <h2>Children</h2><p>ReMCP is a developer and systems-administration tool and is not directed to children under 13.</p>
47
48
  <h2>Changes</h2><p>Material changes to this policy will be published at this URL with an updated effective date.</p>
@@ -52,9 +53,7 @@
52
53
  <img class="brand-mark" src="/android-chrome-192x192.png" width="30" height="30" alt="" aria-hidden="true">
53
54
  <span translate="no">ReMCP</span>
54
55
  </div>
55
- <nav aria-label="Footer">
56
- <a href="/docs">Docs</a><a href="/security">Security</a><a href="/support">Support</a><a href="/privacy">Privacy</a><a href="/terms">Terms</a>
57
- </nav>
56
+ <nav aria-label="Footer"><a href="/docs">Docs</a><a href="/docs#install">Install</a><a href="/docs#update">Update</a><a href="/security">Security</a><a href="/support">Support</a><a href="/privacy">Privacy</a><a href="/terms">Terms</a></nav>
58
57
  <p>Open-source remote MCP infrastructure.</p>
59
58
  </footer>
60
59
  </body>
@@ -8,7 +8,7 @@
8
8
  <title>Security · ReMCP</title>
9
9
  <meta name="description" content="How ReMCP isolates accounts, devices, credentials and remote MCP tool access.">
10
10
  <link rel="preconnect" href="https://www.gstatic.com" crossorigin>
11
- <link rel="stylesheet" href="/style.css?v=b92ac4c9219a">
11
+ <link rel="stylesheet" href="/style.css?v=remcp-012">
12
12
  <meta property="og:site_name" content="ReMCP">
13
13
  <meta property="og:image" content="https://remcp.delio24.com/assets/og-remcp.png">
14
14
  <link rel="icon" href="/favicon.ico" sizes="any">
@@ -28,10 +28,10 @@
28
28
  <img class="brand-mark" src="/android-chrome-192x192.png" width="30" height="30" alt="" aria-hidden="true">
29
29
  <span translate="no">ReMCP</span>
30
30
  </a>
31
- <nav aria-label="Primary"><a href="/docs">Docs</a><a href="/security" aria-current="page">Security</a><a href="/support">Support</a></nav>
31
+ <nav aria-label="Primary"><a href="/docs">Docs</a><a href="/docs#install">Install</a><a href="/docs#update">Update</a><a href="/security" aria-current="page">Security</a><a href="/support">Support</a></nav>
32
32
  </header>
33
33
  <main id="main" class="doc-shell">
34
- <aside class="doc-nav" aria-label="Documentation"><a href="/docs">Setup</a><a href="/security" aria-current="page">Security</a><a href="/support">Support</a><a href="/privacy">Privacy</a><a href="/terms">Terms</a></aside>
34
+ <aside class="doc-nav" aria-label="Documentation"><a href="/docs">Setup</a><a href="/docs#install">Install</a><a href="/docs#update">Update</a><a href="/security" aria-current="page">Security</a><a href="/support">Support</a><a href="/privacy">Privacy</a><a href="/terms">Terms</a></aside>
35
35
  <article class="prose">
36
36
  <p class="eyebrow">Security</p>
37
37
  <h1>A narrow relay between the model and your machine.</h1>
@@ -50,9 +50,7 @@
50
50
  <img class="brand-mark" src="/android-chrome-192x192.png" width="30" height="30" alt="" aria-hidden="true">
51
51
  <span translate="no">ReMCP</span>
52
52
  </div>
53
- <nav aria-label="Footer">
54
- <a href="/docs">Docs</a><a href="/security">Security</a><a href="/support">Support</a><a href="/privacy">Privacy</a><a href="/terms">Terms</a>
55
- </nav>
53
+ <nav aria-label="Footer"><a href="/docs">Docs</a><a href="/docs#install">Install</a><a href="/docs#update">Update</a><a href="/security">Security</a><a href="/support">Support</a><a href="/privacy">Privacy</a><a href="/terms">Terms</a></nav>
56
54
  <p>Open-source remote MCP infrastructure.</p>
57
55
  </footer>
58
56
  </body>