Static security scanner for AI agents, MCP tools, and LLM applications. Detects OWASP LLM Top 10 risks, unsafe tool use, prompt injection paths, secrets, and AI infrastructure misconfigurations. Zero runtime dependencies.
Drift inferred · capture-to-capture
No drift recorded — single capability capture; advisories appear once its surface changes.
transport stdio counts 0 tools · 0 res
· 0 prompts
permission surface via code analysis
No tools enumerated yet for this server.
prompt-surface
shipped agent-instruction files + hidden-content / dangerous-code findings —
quoted from the analyzed source
analyzed commit 77befdb · analyzer v33 · 3d ago
danger signals4
- dynamic code execution eval()/exec() vishnu-77-secchecker-77befdb/bench/fixtures/vulnerable/tool_output_execution/eval_llm_output.py :5
result = eval(completion.text) - dynamic code execution eval()/exec() vishnu-77-secchecker-77befdb/demo/app.py :30
result = eval(llm_response) - committed secret Anthropic key vishnu-77-secchecker-77befdb/tests/test_ast_scanner.py :56
sk-ant…(42 chars, redacted) - committed secret AWS access key id vishnu-77-secchecker-77befdb/tests/test_core.py :15
AKIAIO…(20 chars, redacted)
evidence-backed
findings quoted directly from the published source artifact — not inferred
code files: 110
filesystem 23
- fs (weak) vishnu-77-secchecker-77befdb/bench/fixtures/adversarial/rag_leakage/path_read_text.py :3
# of open().read() - a different idiom already covered by the pattern's own - fs (weak) vishnu-77-secchecker-77befdb/bench/fixtures/benign_realistic/prompt_template_file.py :9
prompt = open("prompt_templates/greeting.txt").read() - fs (weak) vishnu-77-secchecker-77befdb/bench/fixtures/vulnerable/rag_leakage/raw_file_read.py :5
context = open("customer_records.txt").read() - fs vishnu-77-secchecker-77befdb/bench/perf.py :20
import shutil - fs vishnu-77-secchecker-77befdb/bench/run.py :20
from pathlib import Path - fs vishnu-77-secchecker-77befdb/brand/animate_mark.py :10
from pathlib import Path - fs vishnu-77-secchecker-77befdb/brand/render_assets.py :10
from pathlib import Path - fs vishnu-77-secchecker-77befdb/brand/verify_assets.py :5
from pathlib import Path - fs vishnu-77-secchecker-77befdb/secchecker/ast_scanner.py :14
from pathlib import Path - fs vishnu-77-secchecker-77befdb/secchecker/cli.py :490
with open(tmp_path, 'w', encoding='utf-8') as tf: - fs vishnu-77-secchecker-77befdb/secchecker/config.py :5
from pathlib import Path - fs vishnu-77-secchecker-77befdb/secchecker/core.py :4
from pathlib import Path
show 11 more
- fs vishnu-77-secchecker-77befdb/secchecker/dependency_scanner.py :19
from pathlib import Path - fs vishnu-77-secchecker-77befdb/secchecker/devsecops_scanner.py :5
from pathlib import Path - fs vishnu-77-secchecker-77befdb/secchecker/entropy.py :5
from pathlib import Path - fs vishnu-77-secchecker-77befdb/secchecker/html_reporter.py :141
with open(output_path, 'w', encoding='utf-8') as f: - fs vishnu-77-secchecker-77befdb/secchecker/llm_scanner.py :6
from pathlib import Path - fs vishnu-77-secchecker-77befdb/secchecker/reporter.py :3
from pathlib import Path - fs vishnu-77-secchecker-77befdb/secchecker/sarif_reporter.py :97
with open(filepath, "r", encoding="utf-8", errors="replace") as f: - fs (weak) vishnu-77-secchecker-77befdb/tests/test_benchmark_claims.py :11
from pathlib import Path - fs (weak) vishnu-77-secchecker-77befdb/tests/test_cli_contract.py :10
from pathlib import Path - fs (weak) vishnu-77-secchecker-77befdb/tests/test_reporter.py :18
with open(json_file) as f: - fs (weak) vishnu-77-secchecker-77befdb/tests/test_sarif_schema.py :9
from pathlib import Path
shell / exec 8
- shell (weak) vishnu-77-secchecker-77befdb/bench/fixtures/adversarial/tool_output_execution/os_popen_variant.py :8
os.popen(mcp_result) - shell (weak) vishnu-77-secchecker-77befdb/bench/fixtures/adversarial/tool_output_execution/subprocess_call.py :2
# (a tool's raw result executed as a shell command), via subprocess.call() - shell (weak) vishnu-77-secchecker-77befdb/bench/fixtures/vulnerable/tool_output_execution/mcp_result_os_system.py :1
"""Vulnerable: an MCP tool's raw result handed to os.system() -- a distinct - shell (weak) vishnu-77-secchecker-77befdb/bench/fixtures/vulnerable/tool_output_execution/tool_result_shell.py :3
import subprocess - shell vishnu-77-secchecker-77befdb/brand/scenarios.py :103
os.system(mcp_result)''', - shell vishnu-77-secchecker-77befdb/brand/verify_assets.py :7
import subprocess - shell vishnu-77-secchecker-77befdb/secchecker/cli.py :467
import subprocess - shell (weak) vishnu-77-secchecker-77befdb/tests/test_cli_contract.py :8
import subprocess
secrets 2
- secrets (weak) vishnu-77-secchecker-77befdb/tests/test_ast_scanner.py :67
'openai_api_key = os.getenv("OPENAI_API_KEY")\n' - secrets (weak) vishnu-77-secchecker-77befdb/tests/test_llm_scanner.py :408
real_value = 'print(os.getenv("ANTHROPIC_API_KEY"))'
database 1
- db vishnu-77-secchecker-77befdb/demo/app.py :37
import sqlite3
declared dependencies 6
- pytest@>=6.0
- pytest-cov@>=2.0
- flake8@>=3.8
- black@>=21.0
- mypy@>=0.800
- jsonschema@>=4.0