Remote Shell Mcp — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited Remote Shell Mcp (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Remote Shell MCP is a local MCP server that exposes agent-safe remote workspace tools over SSH.
The MVP focuses on a small remote code workspace surface:
profile_listprofile_getprofile_createprofile_updateprofile_deleteprofile_set_defaultworkspace_infosession_createsession_infosession_set_cwdsession_closelist_dirread_filewrite_fileedit_fileapply_patchsearchshellgit_statusgit_diff_statgit_changed_filesreview_changesThe server is intended to run locally. It connects to remote hosts over SSH/SFTP and restricts all file operations and command working directories to configured remote roots.
Create a config file from remote-shell.config.example.json, then point the server at it:
$env:REMOTE_SHELL_CONFIG = "C:\path\to\remote-shell.config.json"
npm run devAfter building:
{
"mcpServers": {
"remote-shell": {
"command": "node",
"args": ["C:\\path\\to\\remote-shell-mcp\\dist\\index.js"],
"env": {
"REMOTE_SHELL_CONFIG": "C:\\path\\to\\remote-shell.config.json"
}
}
}
}Run the local MCP smoke test first:
npm run build
npm run test:mcpThen install the server into Codex's global config:
powershell -ExecutionPolicy Bypass -File .\scripts\install-codex-config.ps1The script backs up %USERPROFILE%\.codex\config.toml and writes:
[mcp_servers.remote_shell]
command = 'C:\Program Files\nodejs\node.exe'
args = ['C:\Users\jeefy\Documents\RemoteShell\dist\index.js']
startup_timeout_sec = 30
[mcp_servers.remote_shell.env]
REMOTE_SHELL_CONFIG = 'C:\Users\jeefy\Documents\RemoteShell\remote-shell.config.json'Restart Codex, or start a new Codex thread, after changing MCP config.
defaultRoot.roots.expectedHash to avoid overwriting changed files.cwd must stay under an allowed root.Use sessions when a task has a working directory that should persist across multiple commands:
{ "cwd": "/root/project" }Then pass the returned sessionId to shell, git_status, git_diff_stat, git_changed_files, or review_changes.
By default, sessions use mode: "context" and store cwd/env only. To reuse one remote shell process across multiple commands, create an interactive session:
{ "cwd": "/root/project", "mode": "interactive" }Interactive sessions preserve shell-local state such as cd, exported variables, functions, and environment activations until session_close or server shutdown.
shell supports three output modes:
json: default structured output with stdout/stderr fields.terminal: terminal-like plain text for easier reading.compact: line counts plus head/tail summaries for long output.For large working tree changes, prefer Git-specific tools over raw git status output:
git_status: parsed branch, ahead/behind, changed files, and counts.git_diff_stat: git diff --stat plus name-status lines.git_changed_files: changed files only.review_changes: compact status + diff stat + review hints.Within one running MCP server process, SSH connections are reused per profile. One-shot shell calls open new exec channels over the existing SSH connection. Interactive sessions keep one shell channel alive and serialize commands sent to that session.
Profiles can set shell and initCommand. One-shot shell calls run the init command before the user command. Interactive sessions run it once when the session is created.
read_file uses a small in-memory cache when fileCache.enabled is true:
fileCache.maxFileBytes are cached.fileCache.ttlMs.write_file, edit_file, and apply_patch update or invalidate affected entries.shell clears the profile file cache because shell commands may modify arbitrary files.See docs/mvp-design.md for the MVP boundaries and extension points.
Profiles are stored in the JSON config file pointed to by REMOTE_SHELL_CONFIG.
Profile tools persist changes atomically:
profile_create fails with ERR_PROFILE_EXISTS when the name already exists.profile_update fails with ERR_PROFILE_NOT_FOUND when the name does not exist.profile_delete fails with ERR_PROFILE_NOT_FOUND when the name does not exist.profile_delete fails with ERR_DEFAULT_PROFILE_DELETE when deleting the default profile without newDefaultProfile.profile_delete fails with ERR_PROFILE_LAST_DELETE when deleting the only remaining profile.Secret fields such as password and passphrase are not returned by profile_list or profile_get.
apply_patch accepts Codex-style patches:
*** Begin Patch
*** Add File: hello.txt
+hello
+world
*** Update File: app.txt
@@
context
-old
+new
*** Delete File: old.txt
*** End PatchThe MVP supports Add File, Update File, and Delete File.
Update File hunks must match exactly once.Add File fails if the target already exists.Delete File fails if the target does not exist.expectedHashes can be provided for update/delete conflict checks.~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.