remote-access-mcp 3.1.0 → 3.1.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 +17 -0
- package/README.md +4 -4
- package/dist/core/approvals.d.ts +7 -2
- package/dist/core/approvals.d.ts.map +1 -1
- package/dist/core/approvals.js +111 -5
- package/dist/core/approvals.js.map +1 -1
- package/dist/core/jobs.d.ts +6 -0
- package/dist/core/jobs.d.ts.map +1 -1
- package/dist/core/jobs.js +129 -17
- package/dist/core/jobs.js.map +1 -1
- package/dist/core/policy.d.ts.map +1 -1
- package/dist/core/policy.js +60 -5
- package/dist/core/policy.js.map +1 -1
- package/dist/tools/changes.d.ts +21 -0
- package/dist/tools/changes.d.ts.map +1 -1
- package/dist/tools/changes.js +182 -23
- package/dist/tools/changes.js.map +1 -1
- package/dist/tools/filesystem.d.ts.map +1 -1
- package/dist/tools/filesystem.js +10 -4
- package/dist/tools/filesystem.js.map +1 -1
- package/dist/tools/monitoring.d.ts.map +1 -1
- package/dist/tools/monitoring.js +132 -7
- package/dist/tools/monitoring.js.map +1 -1
- package/dist/tools/plugins.d.ts.map +1 -1
- package/dist/tools/plugins.js +17 -4
- package/dist/tools/plugins.js.map +1 -1
- package/dist/tools/resources-prompts.js +2 -1
- package/dist/tools/resources-prompts.js.map +1 -1
- package/dist/tools/shell.d.ts.map +1 -1
- package/dist/tools/shell.js +14 -7
- package/dist/tools/shell.js.map +1 -1
- package/docs/ai/security-model.md +7 -0
- package/docs/ai/tools-and-cli.md +11 -1
- package/package.json +4 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugins.d.ts","sourceRoot":"","sources":["../../src/tools/plugins.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"plugins.d.ts","sourceRoot":"","sources":["../../src/tools/plugins.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAetD,wBAAsB,wBAAwB,CAAC,MAAM,EAAC,SAAS,EAAC,GAAG,EAAC,WAAW,GAAE,OAAO,CAAC,IAAI,CAAC,CAS7F;AACD,wBAAgB,mBAAmB,CAAC,MAAM,EAAC,SAAS,EAAC,GAAG,EAAC,WAAW,GAAE,IAAI,CAIzE"}
|
package/dist/tools/plugins.js
CHANGED
|
@@ -13,16 +13,28 @@ function manifests() { if (!fs.existsSync(root()))
|
|
|
13
13
|
catch {
|
|
14
14
|
return [];
|
|
15
15
|
} }); }
|
|
16
|
+
function pluginDir(name) { return path.join(root(), name.replace(/[^a-zA-Z0-9._-]/g, '_')); }
|
|
17
|
+
function pluginEntry(m) {
|
|
18
|
+
if (!m.entry || !m.trusted)
|
|
19
|
+
return null;
|
|
20
|
+
const dir = pluginDir(m.name);
|
|
21
|
+
const resolved = path.resolve(dir, m.entry);
|
|
22
|
+
const rel = path.relative(dir, resolved);
|
|
23
|
+
if (!rel || rel.startsWith('..' + path.sep) || path.isAbsolute(rel))
|
|
24
|
+
return null;
|
|
25
|
+
return resolved;
|
|
26
|
+
}
|
|
16
27
|
export async function registerInstalledPlugins(server, ctx) {
|
|
17
28
|
for (const m of manifests()) {
|
|
18
|
-
|
|
29
|
+
const entry = pluginEntry(m);
|
|
30
|
+
if (!entry)
|
|
19
31
|
continue;
|
|
20
|
-
const dir =
|
|
32
|
+
const dir = pluginDir(m.name);
|
|
21
33
|
const allowed = (m.permissions || []).every(p => !ctx.token.scopes.length || ctx.token.scopes.includes(p));
|
|
22
34
|
if (!allowed)
|
|
23
35
|
continue;
|
|
24
36
|
try {
|
|
25
|
-
const mod = await import(pathToFileURL(
|
|
37
|
+
const mod = await import(pathToFileURL(entry).href);
|
|
26
38
|
if (typeof mod.register === 'function')
|
|
27
39
|
await mod.register(server, ctx);
|
|
28
40
|
}
|
|
@@ -33,7 +45,8 @@ export function registerPluginTools(server, ctx) {
|
|
|
33
45
|
server.registerTool('plugin_list', { description: 'List installed local Remote Access MCP plugins and their declared permissions.', inputSchema: {} }, async () => { assertToolPermitted({ tool: 'plugin_list', scopes: ctx.token.scopes, readOnly: ctx.readOnly }); return { content: [{ type: 'text', text: JSON.stringify(manifests(), null, 2) }] }; });
|
|
34
46
|
server.registerTool('plugin_install', { description: 'Install a trusted local plugin directory containing manifest.json. The source must already exist on the machine.', inputSchema: { source: z.string() } }, async ({ source }) => { assertToolPermitted({ tool: 'plugin_install', scopes: ctx.token.scopes, readOnly: ctx.readOnly }); const src = path.resolve(source); assertAllowed({ allowed_paths: ctx.token.allowed_paths, denied_paths: ctx.token.denied_paths, shell_enabled: ctx.token.shell_enabled }, src); const mf = path.join(src, 'manifest.json'); if (!fs.existsSync(mf))
|
|
35
47
|
return { content: [{ type: 'text', text: 'manifest.json not found.' }], isError: true }; const m = JSON.parse(fs.readFileSync(mf, 'utf8')); if (!m.name || !m.version)
|
|
36
|
-
return { content: [{ type: 'text', text: 'Invalid plugin manifest.' }], isError: true };
|
|
48
|
+
return { content: [{ type: 'text', text: 'Invalid plugin manifest.' }], isError: true }; if (m.trusted !== true)
|
|
49
|
+
return { content: [{ type: 'text', text: 'Plugin manifest must explicitly set trusted=true before installation.' }], isError: true }; const dest = pluginDir(m.name); fs.mkdirSync(root(), { recursive: true }); fs.cpSync(src, dest, { recursive: true }); return { content: [{ type: 'text', text: `Plugin ${m.name}@${m.version} installed. Declared permissions: ${(m.permissions || []).join(', ') || 'none'}.` }] }; });
|
|
37
50
|
server.registerTool('plugin_remove', { description: 'Remove an installed local plugin.', inputSchema: { name: z.string().regex(/^[a-zA-Z0-9._-]+$/) } }, async ({ name }) => { assertToolPermitted({ tool: 'plugin_remove', scopes: ctx.token.scopes, readOnly: ctx.readOnly }); const p = path.join(root(), name); if (!fs.existsSync(p))
|
|
38
51
|
return { content: [{ type: 'text', text: 'Plugin not found.' }], isError: true }; fs.rmSync(p, { recursive: true, force: true }); return { content: [{ type: 'text', text: `Plugin ${name} removed.` }] }; });
|
|
39
52
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugins.js","sourceRoot":"","sources":["../../src/tools/plugins.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACvE,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE9C,MAAM,IAAI,GAAC,GAAE,EAAE,CAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,EAAC,SAAS,CAAC,CAAC;AAC9C,SAAS,SAAS,KAAc,IAAG,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC;IAAC,OAAM,EAAE,CAAC,CAAA,OAAO,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,EAAC,EAAC,aAAa,EAAC,IAAI,EAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAA,EAAE,GAAC,IAAG,CAAC,CAAC,CAAC,WAAW,EAAE;IAAC,OAAM,EAAE,CAAC,CAAA,IAAG,CAAC;IAAA,OAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,EAAC,CAAC,CAAC,IAAI,EAAC,eAAe,CAAC,EAAC,MAAM,CAAC,CAAC,CAAC,CAAA;AAAA,CAAC;AAAA,MAAK,CAAC;IAAA,OAAM,EAAE,CAAA;AAAA,CAAC,CAAA,CAAC,CAAC,CAAA,CAAA,CAAC;AAC1Q,
|
|
1
|
+
{"version":3,"file":"plugins.js","sourceRoot":"","sources":["../../src/tools/plugins.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,7 +9,8 @@ export function registerResourcesAndPrompts(server, ctx) {
|
|
|
9
9
|
server.registerResource('services_resource', 'ramcp://services', { description: 'Configured service and runtime overview', mimeType: 'application/json' }, async () => ({ contents: [{ uri: 'ramcp://services', mimeType: 'application/json', text: json({ platform: process.platform, pid: process.pid, uptime: process.uptime() }) }] }));
|
|
10
10
|
server.registerResource('network_resource', 'ramcp://network', { description: 'Local network interface information', mimeType: 'application/json' }, async () => ({ contents: [{ uri: 'ramcp://network', mimeType: 'application/json', text: json(os.networkInterfaces()) }] }));
|
|
11
11
|
server.registerResource('projects_resource', 'ramcp://projects', { description: 'Local Remote Access MCP data directory overview', mimeType: 'application/json' }, async () => ({ contents: [{ uri: 'ramcp://projects', mimeType: 'application/json', text: json({ dataDir: dataDir(), entries: fs.existsSync(dataDir()) ? fs.readdirSync(dataDir()) : [] }) }] }));
|
|
12
|
-
server.registerResource('audit_resource', 'ramcp://audit', { description: 'Recent audit entries for the authenticated operator', mimeType: 'application/json' }, async () => { gate('audit_resource');
|
|
12
|
+
server.registerResource('audit_resource', 'ramcp://audit', { description: 'Recent audit entries for the authenticated operator', mimeType: 'application/json' }, async () => { gate('audit_resource'); if (!ctx.cfg.audit.enabled)
|
|
13
|
+
return { contents: [{ uri: 'ramcp://audit', mimeType: 'application/json', text: json([]) }] }; const { AuditLog } = await import('../core/audit.js'); const audit = new AuditLog(ctx.cfg.audit.db_path); const fingerprint = AuditLog.fingerprint(ctx.token.token); const rows = audit.query({ fingerprint, limit: 100 }); return { contents: [{ uri: 'ramcp://audit', mimeType: 'application/json', text: json(rows) }] }; });
|
|
13
14
|
const prompt = (name, title, description, text) => server.registerPrompt(name, { title, description }, async () => ({ description, messages: [{ role: 'user', content: { type: 'text', text } }] }));
|
|
14
15
|
prompt('diagnose_prompt', 'Diagnose Server', 'Systematic server diagnosis', 'Inspect system health, failed services, processes, ports, logs, disk and network. Prefer read-only diagnostics first and summarize evidence before proposing mutations.');
|
|
15
16
|
prompt('deploy_prompt', 'Deploy Project', 'Safe project deployment', 'Inspect the project, run tests/build, create a change snapshot, apply the smallest safe deployment steps, verify service health, and report rollback instructions.');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resources-prompts.js","sourceRoot":"","sources":["../../src/tools/resources-prompts.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"resources-prompts.js","sourceRoot":"","sources":["../../src/tools/resources-prompts.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shell.d.ts","sourceRoot":"","sources":["../../src/tools/shell.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAOtD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"shell.d.ts","sourceRoot":"","sources":["../../src/tools/shell.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAKzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAOtD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,EAAE,WAAW,GAAG,IAAI,CAgI5E"}
|
package/dist/tools/shell.js
CHANGED
|
@@ -3,7 +3,7 @@ import { promisify } from 'node:util';
|
|
|
3
3
|
import { z } from 'zod';
|
|
4
4
|
import { assertToolPermitted, assertCommandPolicy } from '../core/policy.js';
|
|
5
5
|
import { AuditLog } from '../core/audit.js';
|
|
6
|
-
import { requestApproval, getApproval, decideApproval } from '../core/approvals.js';
|
|
6
|
+
import { requestApproval, getApproval, decideApproval, consumeApproval } from '../core/approvals.js';
|
|
7
7
|
import { shellCommand, childEnv, isWindows } from '../core/platform.js';
|
|
8
8
|
const exec = promisify(execFile);
|
|
9
9
|
const MAX_OUTPUT = 60_000;
|
|
@@ -31,9 +31,14 @@ export function registerShellTools(server, ctx) {
|
|
|
31
31
|
assertToolPermitted({ tool: 'run_command', scopes: ctx.token.scopes, readOnly: ctx.readOnly, policy: policy(), target: cwd });
|
|
32
32
|
const tokenId = AuditLog.fingerprint(ctx.token.token);
|
|
33
33
|
const approval = approval_id ? getApproval(approval_id, tokenId) : undefined;
|
|
34
|
-
if (ctx.token.approval_mode === 'approval-required'
|
|
35
|
-
|
|
36
|
-
|
|
34
|
+
if (ctx.token.approval_mode === 'approval-required') {
|
|
35
|
+
if (!approval || approval.status !== 'approved' || approval.command !== command || approval.cwd !== cwd) {
|
|
36
|
+
const pending = requestApproval(tokenId, command, cwd);
|
|
37
|
+
return { content: [{ type: 'text', text: `Approval required. Ask an authorized operator to approve approval_id=${pending.id}, then retry with approval_id.` }], isError: true };
|
|
38
|
+
}
|
|
39
|
+
if (!consumeApproval(approval.id, tokenId, command, cwd)) {
|
|
40
|
+
return { content: [{ type: 'text', text: 'Approval is invalid, already consumed, or does not match this exact command/cwd.' }], isError: true };
|
|
41
|
+
}
|
|
37
42
|
}
|
|
38
43
|
assertCommandPolicy({ command_allowlist: ctx.token.command_allowlist, approval_mode: 'auto' }, command, true);
|
|
39
44
|
const timeout = Math.min(timeout_ms, 600_000);
|
|
@@ -69,11 +74,13 @@ export function registerShellTools(server, ctx) {
|
|
|
69
74
|
inputSchema: { id: z.string(), approved: z.boolean() },
|
|
70
75
|
}, async ({ id, approved }) => {
|
|
71
76
|
assertToolPermitted({ tool: 'approval_decide', scopes: ctx.token.scopes, readOnly: ctx.readOnly });
|
|
72
|
-
const
|
|
73
|
-
const
|
|
77
|
+
const actorId = AuditLog.fingerprint(ctx.token.token);
|
|
78
|
+
const privileged = ctx.token.role === 'admin' || ctx.token.role === 'deployer';
|
|
79
|
+
const requesterId = privileged ? undefined : actorId;
|
|
80
|
+
const a = getApproval(id, requesterId);
|
|
74
81
|
if (!a)
|
|
75
82
|
return { content: [{ type: 'text', text: 'Approval not found or not authorized.' }], isError: true };
|
|
76
|
-
decideApproval(id,
|
|
83
|
+
decideApproval(id, requesterId, approved, actorId);
|
|
77
84
|
return { content: [{ type: 'text', text: `Approval ${id}: ${approved ? 'approved' : 'rejected'}.` }] };
|
|
78
85
|
});
|
|
79
86
|
// ---- process_list ---------------------------------------------------------
|
package/dist/tools/shell.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shell.js","sourceRoot":"","sources":["../../src/tools/shell.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC7E,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"shell.js","sourceRoot":"","sources":["../../src/tools/shell.ts"],"names":[],"mappings":"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"}
|
|
@@ -112,3 +112,10 @@ pass them as `target:` to the gate; (4) think about injection (quotes,
|
|
|
112
112
|
metacharacters, second-order effects) and add a guard, not a regex hope;
|
|
113
113
|
(5) never log secrets; the audit wrapper redacts args but your *output* is
|
|
114
114
|
on you.
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
## Approval security
|
|
118
|
+
|
|
119
|
+
Approval records are durable and protected by a filesystem lock. A granted approval is cryptographically unrelated to the shell command, so the implementation binds the approval to the exact command and working directory and atomically marks it consumed before execution. This prevents approval replay and command substitution.
|
|
120
|
+
|
|
121
|
+
Plugins are a trusted in-process extension mechanism. Entrypoints cannot escape their plugin directory, but JavaScript executed by an installed trusted plugin has the gateway process privileges; plugin installation is therefore an administrative trust boundary, not a sandbox.
|
package/docs/ai/tools-and-cli.md
CHANGED
|
@@ -115,10 +115,11 @@ persist via `saveConfig` and hot-reload; they cannot touch other tokens.
|
|
|
115
115
|
### Transfers / safety
|
|
116
116
|
- `upload_file` / `download_file` — binary-safe transfer with SHA-256
|
|
117
117
|
- `approval_decide` — approve or reject sensitive shell operations
|
|
118
|
-
- `change_set_begin` / `change_set_add` / `change_set_status` / `change_set_commit` / `change_set_rollback`
|
|
118
|
+
- `change_set_begin` / `change_set_add` / `change_set_status` / `change_set_commit` / `change_set_rollback` — managed filesystem change sets; pass `change_set_id` to `write_file`, `edit_file`, and `delete_path` to capture mutations automatically. Rollback tracks missing paths (created later), restores deleted/modified paths, and can resume after partial failure.
|
|
119
119
|
|
|
120
120
|
### Diagnostics / data
|
|
121
121
|
- `system_diagnostics` / `diagnose_service`
|
|
122
|
+
- `health_watch` / `health_status` / `health_stop` — persistent application-level watchers with single-process ownership and restart recovery.
|
|
122
123
|
- `health_watch` / `health_status` / `health_stop`
|
|
123
124
|
- `database_query` / `database_schema`
|
|
124
125
|
|
|
@@ -172,3 +173,12 @@ persist via `saveConfig` and hot-reload; they cannot touch other tokens.
|
|
|
172
173
|
Env overrides (tests, minimal deploys): `RAMCP_TOKEN RAMCP_HOST RAMCP_PORT
|
|
173
174
|
RAMCP_PUBLIC_HOST RAMCP_SHELL RAMCP_ALLOWED_PATHS RAMCP_DENIED_PATHS`
|
|
174
175
|
(legacy `DANA_*` still honored). `SSH_BIN` existed for fleet tests — gone.
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
### Approvals
|
|
179
|
+
|
|
180
|
+
Shell approvals are persisted under the data directory, survive gateway restarts, are bound to the exact command and working directory, record the approving token fingerprint, and are atomically consumed after one execution. An approval cannot be reused for another command.
|
|
181
|
+
|
|
182
|
+
### Plugins
|
|
183
|
+
|
|
184
|
+
Installed plugins must explicitly set `trusted: true`. Plugin entrypoints are constrained to remain inside their own plugin directory. Plugins are intentionally a trusted in-process extension point, not a security sandbox; do not install untrusted code.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "remote-access-mcp",
|
|
3
|
-
"version": "3.1.
|
|
3
|
+
"version": "3.1.1",
|
|
4
4
|
"description": "Turn any machine into a secure AI-agent-accessible endpoint via MCP. Connect ChatGPT, Claude, Grok, and other MCP clients to files, shell, git, services, and more.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -82,5 +82,8 @@
|
|
|
82
82
|
"better-sqlite3@12.11.1": true,
|
|
83
83
|
"esbuild@0.28.2": true,
|
|
84
84
|
"esbuild@0.21.5": true
|
|
85
|
+
},
|
|
86
|
+
"overrides": {
|
|
87
|
+
"qs": ">=6.16.0"
|
|
85
88
|
}
|
|
86
89
|
}
|