devnarrate
PyPI
v0.1.0a7
Published by kmandana — no publish provenance and no vendor-owned scope, so the publisher could not be verified. The repository link below is self-declared.
Every server starts at 100. These are the exact deductions the deterministic engine applied — each one reproducible, none of it an opinion or an LLM's guess:
| Points | What was found | Category |
|---|---|---|
| −40.7 | Hardcoded AWS access key id in server code ×4 MTC-SRC-008 | exfiltration |
| −2.1 | Package has no source repository MTC-SUP-011 | supply-chain |
Grade capped: 4 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 the deduction.
A live-looking AWS access key id is hardcoded in `tests/sample_diffs.py:21`. 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 tests/sample_diffs.py
A live-looking AWS access key id is hardcoded in `tests/test_config.py:323`. 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 tests/test_config.py
A live-looking AWS access key id is hardcoded in `tests/test_secret_scanner.py:146`. 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 tests/test_secret_scanner.py
A live-looking AWS access key id is hardcoded in `tests/test_server.py:93`. 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 tests/test_server.py
In the server's implementation (`devnarrate/git_operations.py:59`): 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: subprocess.run(
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 devnarrate/git_operations.py
In the server's implementation (`tests/conftest.py: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: subprocess.run(
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 tests/conftest.py
In the server's implementation (`tests/test_config.py:251`): 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: subprocess.run(
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 tests/test_config.py
In the server's implementation (`tests/test_git_operations.py:135`): 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: subprocess.run(
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 tests/test_git_operations.py
In the server's implementation (`tests/test_secret_scanner.py:256`): 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: subprocess.run(
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 tests/test_secret_scanner.py
In the server's implementation (`tests/test_server.py:57`): 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: subprocess.run(
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 tests/test_server.py
"devnarrate" declares no repository URL, so its published artifact cannot be compared against reviewable source.
Fix: Prefer packages that link to public, reviewable source.
Location: package devnarrate
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.
| Version | Score | Findings | Engine | Scanned |
|---|---|---|---|---|
v0.1.0a7 latest |
F 57/100 | 11 | 1.5.0 | 2026-07-22 |
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.
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 devnarrate --online --registry pypi
Security scan results for the 199bio Mcp Limitless MCP server.
Security scan results for the 1mcp MCP server.
Security scan results for the 1stay MCP server.
Generates production-ready UI components from natural language, inspired by v0.
Security scan results for the 2slides MCP server.
Security scan results for the 3d MCP server.