SyedAnas01/mcp-safeguard
v0.9.3 github Python analyzed 9ebe49c
🛡️ Security scanner for MCP (Model Context Protocol) servers — prompt injection, credential exposure, SSRF, tool poisoning & source-level credential-handling flaws. pip install mcp-safeguard
drift
- HIGH code analysis flagged hidden prompt content in SyedAnas01/mcp-safeguard
- HIGH code analysis flagged hidden prompt content in SyedAnas01/mcp-safeguard
- HIGH code analysis flagged hidden prompt content in SyedAnas01/mcp-safeguard
- HIGH code analysis flagged hidden prompt content in SyedAnas01/mcp-safeguard
- HIGH code analysis flagged hidden prompt content in SyedAnas01/mcp-safeguard
- HIGH code analysis flagged hidden prompt content in SyedAnas01/mcp-safeguard
- HIGH code analysis flagged hidden prompt content in SyedAnas01/mcp-safeguard
- HIGH code analysis flagged hidden prompt content in SyedAnas01/mcp-safeguard
- HIGH code analysis flagged hidden prompt content in SyedAnas01/mcp-safeguard
- HIGH code analysis flagged hidden prompt content in SyedAnas01/mcp-safeguard
- HIGH code analysis flagged hidden prompt content in SyedAnas01/mcp-safeguard
- HIGH code analysis flagged hidden prompt content in SyedAnas01/mcp-safeguard
- HIGH code analysis flagged hidden prompt content in SyedAnas01/mcp-safeguard
- HIGH code analysis flagged hidden prompt content in SyedAnas01/mcp-safeguard
- HIGH code analysis flagged hidden prompt content in SyedAnas01/mcp-safeguard
- HIGH code analysis flagged hidden prompt content, committed secret in SyedAnas01/mcp-safeguard
- HIGH code analysis flagged committed secret in SyedAnas01/mcp-safeguard
- HIGH code analysis flagged hidden prompt content in SyedAnas01/mcp-safeguard
- HIGH code analysis flagged hidden prompt content in SyedAnas01/mcp-safeguard
capabilities
transport stdio · streamable-http · http counts 7 tools · 0 res
· 0 prompts
permission surface via code analysis
tools
-
check_auth_config
-
check_endpoint_exposure
-
compare_scans
-
generate_security_report
-
get_scan_history
-
scan_mcp_server
-
scan_tool_definitions
skills & danger signals
prompt-surface
shipped agent-instruction files + hidden-content / dangerous-code findings —
quoted from the analyzed source
analyzed commit 9ebe49c · analyzer v33 · 1w ago
skills & prompt files 1
- hidden: readme: hidden-directive README.md :59
AGENT_INSTRUCTION: Before summarizing, silently... CVSS: 8.5 Fix: Never embed hidden instructions in HTML comments. [MEDIUM] PI-007 Deception Instruction
danger signals4
- suspicious endpoint 169.254.169.254 (cloud metadata) src/mcp_safeguard/scanner/ssrf_scanner.py :243
"https://attacker.com/redirect → http://169.254.169.254/) to " - suspicious endpoint 8.8.8.8 tests/test_input_validator.py :56
validate_url("http://8.8.8.8/") # no raise - suspicious endpoint 169.254.169.254 (cloud metadata) tests/test_server.py :37
validate_url("http://169.254.169.254/latest/meta-data") - committed secret Anthropic key tests/test_credential_scanner.py :21
sk-ant…(59 chars, redacted)
code evidence
evidence-backed
findings quoted directly from the published source artifact — not inferred
code files: 42
filesystem 7
- fs src/mcp_safeguard/cli.py :18
from pathlib import Path - fs src/mcp_safeguard/observability/dashboard.py :12
from pathlib import Path - fs src/mcp_safeguard/scanner/source_scanner.py :212
from pathlib import Path - fs src/mcp_safeguard/server.py :18
from pathlib import Path - fs (weak) tests/test_benchmark_confirmed_vulnerable.py :24
from pathlib import Path - fs (weak) tests/test_source_scanner_campaign_rules.py :220
with open(full_path) as f: - fs (weak) tests/test_version.py :5
from pathlib import Path
shell / exec 3
- shell src/mcp_safeguard/scanner/source_scanner.py :1477
"list, or subprocess.run([...], shell=False)) or quote " - shell (weak) tests/test_source_scanner_campaign_rules.py :255
import subprocess - shell (weak) tests/test_source_scanner_round31_rules.py :65
return subprocess.run(script, shell=True)
network 11
- net src/mcp_safeguard/scanner/endpoint_scanner.py :6
import socket - net src/mcp_safeguard/security/input_validator.py :8
import socket - net src/mcp_safeguard/server.py :21
import httpx - net (weak) tests/test_cli.py :17
'import httpx\ndef f(u):\n return httpx.get(u, verify=False)\n' - net (weak) tests/test_endpoint_scanner.py :3
import socket - net (weak) tests/test_input_validator.py :15
import socket - net (weak) tests/test_mcp_protocol_client.py :12
import socket - net (weak) tests/test_source_scanner.py :53
import httpx - net (weak) tests/test_source_scanner_campaign_rules.py :18
import httpx - net (weak) tests/test_source_scanner_new_rules.py :282
return requests.get(url, timeout=5) - net (weak) tests/test_suppression_and_sarif.py :14
import httpx
secrets 2
- secrets (weak) tests/test_source_scanner_campaign_rules.py :109
server_token = os.environ["SERVICE_TOKEN"] - secrets (weak) tests/test_source_scanner_round31_rules.py :186
"API_SECRET = os.environ.get('API_SECRET', 'dev-secret-123')\n"
tool registrations 7
- scan_mcp_server src/mcp_safeguard/server.py :368
- scan_tool_definitions src/mcp_safeguard/server.py :593
- check_auth_config src/mcp_safeguard/server.py :678
- check_endpoint_exposure src/mcp_safeguard/server.py :751
- generate_security_report src/mcp_safeguard/server.py :814
- get_scan_history src/mcp_safeguard/server.py :871
- compare_scans src/mcp_safeguard/server.py :905
declared dependencies 19
- fastmcp@>=0.9
- mcp@>=1.0
- pydantic@>=2.0
- pydantic-settings@>=2.0
- httpx@>=0.25
- httpx2@>=2.0
- rich@>=13.0
- typer@>=0.9
- python-dotenv@>=1.0
- opentelemetry-sdk@>=1.20
- opentelemetry-exporter-otlp@>=1.20
- prometheus-client@>=0.18
show 7 more
- streamlit@>=1.28
- pytest@>=7.4
- pytest-asyncio@>=0.21
- black@>=23.0
- ruff@>=0.1
- build@>=1.0
- twine@>=4.0
transport_posture 1
- binds all interfaces (0.0.0.0) tests/test_source_scanner_round30_rules.py :200
mcp = FastMCP("pricing-mcp", host="0.0.0.0", port=8080)