SyedAnas01/mcp-safeguard

v0.9.3
github
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

maintainer
SyedAnas01
licence
MIT
first seen
2026-06-20
last seen
2026-09-07
releases · 30d
0
github stars
11 reported
short id

drift

inferred · capture-to-capture
  1. HIGH code analysis flagged hidden prompt content in SyedAnas01/mcp-safeguard
  2. HIGH code analysis flagged hidden prompt content in SyedAnas01/mcp-safeguard
  3. HIGH code analysis flagged hidden prompt content in SyedAnas01/mcp-safeguard
  4. HIGH code analysis flagged hidden prompt content in SyedAnas01/mcp-safeguard
  5. HIGH code analysis flagged hidden prompt content in SyedAnas01/mcp-safeguard
  6. HIGH code analysis flagged hidden prompt content in SyedAnas01/mcp-safeguard
  7. HIGH code analysis flagged hidden prompt content in SyedAnas01/mcp-safeguard
  8. HIGH code analysis flagged hidden prompt content in SyedAnas01/mcp-safeguard
  9. HIGH code analysis flagged hidden prompt content in SyedAnas01/mcp-safeguard
  10. HIGH code analysis flagged hidden prompt content in SyedAnas01/mcp-safeguard
  11. HIGH code analysis flagged hidden prompt content in SyedAnas01/mcp-safeguard
  12. HIGH code analysis flagged hidden prompt content in SyedAnas01/mcp-safeguard
  13. HIGH code analysis flagged hidden prompt content in SyedAnas01/mcp-safeguard
  14. HIGH code analysis flagged hidden prompt content in SyedAnas01/mcp-safeguard
  15. HIGH code analysis flagged hidden prompt content in SyedAnas01/mcp-safeguard
  16. HIGH code analysis flagged hidden prompt content, committed secret in SyedAnas01/mcp-safeguard
  17. HIGH code analysis flagged committed secret in SyedAnas01/mcp-safeguard
  18. HIGH code analysis flagged hidden prompt content in SyedAnas01/mcp-safeguard
  19. HIGH code analysis flagged hidden prompt content in SyedAnas01/mcp-safeguard

capabilities

7 tools
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

github-tarball
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

code evidence

v0.9.3 · github-tarball
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)