Shellward MCP Server

shellward npm v0.7.21

Published by jnmetacode — no publish provenance, so origin is unverified, but the source is public: the repository link below is self-declared yet readable, so you can inspect the code before adopting it.

AI agent security & MCP security middleware — prompt injection detection, AI firewall, runtime guardrails & data-loss prevention for LLM tool calls. 8-layer defense against data exfiltration & dangerous commands. Zero dependencies. SDK + OpenClaw plugin.

Trust grade
D
60/100
Last scanned get badge →
Trust
D · 60/100
Adoption risk for you: the threat score, then adjusted down for blast radius, publisher verification and how much the scan could see. Deterministic; every point is auditable.
Capability
High
Blast radius if it went rogue — what the server’s tools could reach. Independent of trust.
Coverage
Source
How much the scan could actually inspect. Shallow coverage is stated, never hidden.
Share this Trust Score
𝕏 Share LinkedIn Reddit
D Why this grade threat 67 − adoption risk = 60/100

The grade answers one question — how safe is this server for you to adopt — so it is computed in two auditable stages. Nothing below is an opinion or an LLM's guess; every line is a real term the deterministic engine applied, and the same input always yields the same number.

1. Threat score — 100 − 33 = 67. What the published surface and source actually contain:

PointsWhat was foundCategory
−33 Hardcoded AWS access key id in server code ×2 MTC-SRC-008 exfiltration

2. Client adoption risk — 67 − 7 = 60. Three small, subtract-only factors that reflect your risk in adopting it — a clean scan proves less on a powerful, unverified or barely-inspectable package, so the grade says so plainly:

PointsAdoption-risk factor
−6 capability blast radius (high) — client exposure if the model is manipulated
−1 publisher verification (public source) — no provenance, but the source is public and inspectable

Grade capped: 2 confirmed high findings → grade capped at D. A hard gate overrides the point total — no amount of clean surface buys back a confirmed catastrophe.

Capability observations and info notes are shown under Findings but never scored. Open any row's finding below for the file, line and evidence behind a deduction.

Findings 18

high Reads a sensitive credential path or dumps the environment (dist/commands/harden.js)MTC-SRC-006

In the server's implementation (`dist/commands/harden.js:36`): Reading private keys / cloud credentials, or serializing the whole environment, is a sensitive-data source that becomes exfiltration when combined with any egress. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.

Evidence: ['.ssh/id_rsa', 0o600], ['.ssh/id_ed25519', 0o600], ['.ssh/config', 0o6

Fix: Review this call path: confirm it never receives unsanitized tool input, constrain it, or remove it. Treat a server whose code reaches these sinks as high-capability regardless of what its tools claim.

Location: server dist/commands/harden.js

high Reads a sensitive credential path or dumps the environment (dist/mcp-server.js)MTC-SRC-006

In the server's implementation (`dist/mcp-server.js:90`): Reading private keys / cloud credentials, or serializing the whole environment, is a sensitive-data source that becomes exfiltration when combined with any egress. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.

Evidence: e. Protects .env, .ssh/, .aws/credentials, private keys, /etc/passwd, etc.', inputSchema: { type: 'o

Fix: Review this call path: confirm it never receives unsanitized tool input, constrain it, or remove it. Treat a server whose code reaches these sinks as high-capability regardless of what its tools claim.

Location: server dist/mcp-server.js

high Reads a sensitive credential path or dumps the environment (dist/rules/tool-poisoning.js)MTC-SRC-006

In the server's implementation (`dist/rules/tool-poisoning.js:60`): Reading private keys / cloud credentials, or serializing the whole environment, is a sensitive-data source that becomes exfiltration when combined with any egress. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.

Evidence: pattern: /(?:~\/\.ssh|id_rsa|\.aws\/credentials|\.env\b|\.cursor\/mcp\.json|\.npmrc|\/etc\/passwd|\.config\/.*(?:token

Fix: Review this call path: confirm it never receives unsanitized tool input, constrain it, or remove it. Treat a server whose code reaches these sinks as high-capability regardless of what its tools claim.

Location: server dist/rules/tool-poisoning.js

high Reads a sensitive credential path or dumps the environment (src/commands/harden.ts)MTC-SRC-006

In the server's implementation (`src/commands/harden.ts:45`): Reading private keys / cloud credentials, or serializing the whole environment, is a sensitive-data source that becomes exfiltration when combined with any egress. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.

Evidence: 0o600], ['.ssh/id_rsa', 0o600], ['.ssh/id_ed25519', 0o600], ['.ssh/config', 0o600], ['.

Fix: Review this call path: confirm it never receives unsanitized tool input, constrain it, or remove it. Treat a server whose code reaches these sinks as high-capability regardless of what its tools claim.

Location: server src/commands/harden.ts

high Reads a sensitive credential path or dumps the environment (src/mcp-server.ts)MTC-SRC-006

In the server's implementation (`src/mcp-server.ts:113`): Reading private keys / cloud credentials, or serializing the whole environment, is a sensitive-data source that becomes exfiltration when combined with any egress. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.

Evidence: e. Protects .env, .ssh/, .aws/credentials, private keys, /etc/passwd, etc.', inputSchema: { type: 'object' as

Fix: Review this call path: confirm it never receives unsanitized tool input, constrain it, or remove it. Treat a server whose code reaches these sinks as high-capability regardless of what its tools claim.

Location: server src/mcp-server.ts

high Reads a sensitive credential path or dumps the environment (src/rules/tool-poisoning.ts)MTC-SRC-006

In the server's implementation (`src/rules/tool-poisoning.ts:71`): Reading private keys / cloud credentials, or serializing the whole environment, is a sensitive-data source that becomes exfiltration when combined with any egress. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.

Evidence: pattern: /(?:~\/\.ssh|id_rsa|\.aws\/credentials|\.env\b|\.cursor\/mcp\.json|\.npmrc|\/etc\/passwd|\.config\/.*(?:token

Fix: Review this call path: confirm it never receives unsanitized tool input, constrain it, or remove it. Treat a server whose code reaches these sinks as high-capability regardless of what its tools claim.

Location: server src/rules/tool-poisoning.ts

high Hardcoded AWS access key id in server code (dist/web/scan-server.js)MTC-SRC-008

A hardcoded AWS access key id (a live-looking credential hardcoded in shipped code) appears in `dist/web/scan-server.js:264`. Secrets in source ship to everyone who installs the package and are a direct credential leak.

Evidence: AWS access key id: AKIA…(redacted)

Fix: Remove the secret, rotate it, and load credentials from the environment or a secret store.

Location: server dist/web/scan-server.js

high Hardcoded AWS access key id in server code (src/web/scan-server.ts)MTC-SRC-008

A hardcoded AWS access key id (a live-looking credential hardcoded in shipped code) appears in `src/web/scan-server.ts:242`. Secrets in source ship to everyone who installs the package and are a direct credential leak.

Evidence: AWS access key id: AKIA…(redacted)

Fix: Remove the secret, rotate it, and load credentials from the environment or a secret store.

Location: server src/web/scan-server.ts

high Shell/command execution in server code (dist/auto-check.js)MTC-SRC-002

In the server's implementation (`dist/auto-check.js:3`): Spawning a shell/process is command-execution capability; with unsanitized tool input it is command injection / RCE. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.

Evidence: port { execSync } from 'child_process'; import { existsSync, readFileSync, readdirSync } from 'fs'; import { join } from

Fix: Review this call path: confirm it never receives unsanitized tool input, constrain it, or remove it. Treat a server whose code reaches these sinks as high-capability regardless of what its tools claim.

Location: server dist/auto-check.js

high Shell/command execution in server code (dist/cli.js)MTC-SRC-002

In the server's implementation (`dist/cli.js:15`): Spawning a shell/process is command-execution capability; with unsanitized tool input it is command injection / RCE. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.

Evidence: import { spawn } from 'child_process'; import { ShellWard } from './core/engine.js'; import { runProjectComplianceAudit

Fix: Review this call path: confirm it never receives unsanitized tool input, constrain it, or remove it. Treat a server whose code reaches these sinks as high-capability regardless of what its tools claim.

Location: server dist/cli.js

high Shell/command execution in server code (dist/commands/check-updates.js)MTC-SRC-002

In the server's implementation (`dist/commands/check-updates.js:2`): Spawning a shell/process is command-execution capability; with unsanitized tool input it is command injection / RCE. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.

Evidence: port { execSync } from 'child_process'; import { existsSync, readFileSync } from 'fs'; import { join } from 'path'; impo

Fix: Review this call path: confirm it never receives unsanitized tool input, constrain it, or remove it. Treat a server whose code reaches these sinks as high-capability regardless of what its tools claim.

Location: server dist/commands/check-updates.js

high Shell/command execution in server code (dist/commands/harden.js)MTC-SRC-002

In the server's implementation (`dist/commands/harden.js:4`): Spawning a shell/process is command-execution capability; with unsanitized tool input it is command injection / RCE. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.

Evidence: port { execSync } from 'child_process'; import { resolveLocale } from '../types.js'; import { getHomeDir } from '../util

Fix: Review this call path: confirm it never receives unsanitized tool input, constrain it, or remove it. Treat a server whose code reaches these sinks as high-capability regardless of what its tools claim.

Location: server dist/commands/harden.js

high Shell/command execution in server code (dist/commands/scan-plugins.js)MTC-SRC-002

In the server's implementation (`dist/commands/scan-plugins.js:11`): Spawning a shell/process is command-execution capability; with unsanitized tool input it is command injection / RCE. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.

Evidence: ion' }, { pattern: /child_process|execSync|spawnSync|exec\(/, name: 'shell exec', risk: 'command execution' }, {

Fix: Review this call path: confirm it never receives unsanitized tool input, constrain it, or remove it. Treat a server whose code reaches these sinks as high-capability regardless of what its tools claim.

Location: server dist/commands/scan-plugins.js

high Shell/command execution in server code (dist/commands/security.js)MTC-SRC-002

In the server's implementation (`dist/commands/security.js:4`): Spawning a shell/process is command-execution capability; with unsanitized tool input it is command injection / RCE. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.

Evidence: port { execSync } from 'child_process'; import { getHomeDir } from '../utils.js'; import { resolveLocale } from '../type

Fix: Review this call path: confirm it never receives unsanitized tool input, constrain it, or remove it. Treat a server whose code reaches these sinks as high-capability regardless of what its tools claim.

Location: server dist/commands/security.js

high Shell/command execution in server code (dist/commands/upgrade-openclaw.js)MTC-SRC-002

In the server's implementation (`dist/commands/upgrade-openclaw.js:2`): Spawning a shell/process is command-execution capability; with unsanitized tool input it is command injection / RCE. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.

Evidence: port { execSync } from 'child_process'; import { resolveLocale } from '../types.js'; export function registerUpgradeOpen

Fix: Review this call path: confirm it never receives unsanitized tool input, constrain it, or remove it. Treat a server whose code reaches these sinks as high-capability regardless of what its tools claim.

Location: server dist/commands/upgrade-openclaw.js

high Shell/command execution in server code (dist/mcp-client.js)MTC-SRC-002

In the server's implementation (`dist/mcp-client.js:7`): Spawning a shell/process is command-execution capability; with unsanitized tool input it is command injection / RCE. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.

Evidence: import { spawn } from 'child_process'; import { existsSync, readFileSync } from 'fs'; import { join } from 'path'; impo

Fix: Review this call path: confirm it never receives unsanitized tool input, constrain it, or remove it. Treat a server whose code reaches these sinks as high-capability regardless of what its tools claim.

Location: server dist/mcp-client.js

high Shell/command execution in server code (dist/web/scan-server.js)MTC-SRC-002

In the server's implementation (`dist/web/scan-server.js:16`): Spawning a shell/process is command-execution capability; with unsanitized tool input it is command injection / RCE. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.

Evidence: import { spawn } from 'child_process'; import { mkdtempSync, rmSync, existsSync, statSync, mkdirSync, writeFileSync, re

Fix: Review this call path: confirm it never receives unsanitized tool input, constrain it, or remove it. Treat a server whose code reaches these sinks as high-capability regardless of what its tools claim.

Location: server dist/web/scan-server.js

high Shell/command execution in server code (src/auto-check.ts)MTC-SRC-002

In the server's implementation (`src/auto-check.ts:4`): Spawning a shell/process is command-execution capability; with unsanitized tool input it is command injection / RCE. This is read from the code itself — not from the tool description — so a poisoned server cannot hide it behind honest-looking metadata.

Evidence: port { execSync } from 'child_process' import { existsSync, readFileSync, readdirSync } from 'fs' import { join } from '

Fix: Review this call path: confirm it never receives unsanitized tool input, constrain it, or remove it. Treat a server whose code reaches these sinks as high-capability regardless of what its tools claim.

Location: server src/auto-check.ts

What this scan could not see

Versions 1

Scan history per published version. The engine is deterministic — the same version always yields the same score, so a changed score means the package itself changed.

VersionScoreFindingsEngineScanned
v0.7.21 latest D 60/100 18 1.13.0 2026-09-07

Embed this score

Show this server's live Trust Score in your README, docs or website. The badge is served straight from the registry and updates automatically after every rescan — no API key needed. It links back to this page, so anyone who sees the grade can also read the findings behind it instead of taking a number on faith.

MCP Trust Score: D · 60/100
Markdown (GitHub README)
[![MCP Trust Score](https://mcptrustchecker.com/registry/shellward/badge.svg)](https://mcptrustchecker.com/registry/shellward)
HTML
<a href="https://mcptrustchecker.com/registry/shellward"><img src="https://mcptrustchecker.com/registry/shellward/badge.svg" alt="MCP Trust Score" height="20"></a>
Prefer shields.io styling? Point it at https://mcptrustchecker.com/registry/shellward/badge.json via https://img.shields.io/endpoint?url=…

Verify this score yourself

The score above is reproducible: the same package version always yields the same result. Run it locally or over the free API — no account, no LLM, fully deterministic.

npx mcptrustchecker scan shellward --online

Use the free API → How scoring works

More in AI & Agents