Audit all locally configured MCP servers for permission risks, prompt injection threats, and schema drift
Drift inferred · capture-to-capture
- HIGH code analysis flagged dynamic code execution in saagpatel/MCPAudit
- HIGH code analysis flagged dynamic code execution in saagpatel/MCPAudit
- HIGH code analysis flagged dynamic code execution in saagpatel/MCPAudit
- HIGH code analysis flagged dynamic code execution in saagpatel/MCPAudit
- HIGH code analysis flagged dynamic code execution in saagpatel/MCPAudit
- HIGH code analysis flagged dynamic code execution in saagpatel/MCPAudit
- HIGH code analysis flagged dynamic code execution in saagpatel/MCPAudit
- HIGH code analysis flagged dynamic code execution in saagpatel/MCPAudit
- HIGH code analysis flagged dynamic code execution in saagpatel/MCPAudit
- HIGH code analysis flagged dynamic code execution in saagpatel/MCPAudit
- HIGH code analysis flagged dynamic code execution in saagpatel/MCPAudit
- HIGH code analysis flagged dynamic code execution in saagpatel/MCPAudit
- HIGH code analysis flagged dynamic code execution in saagpatel/MCPAudit
transport stdio · http
verified
reported
listed in the official MCP registry counts 13 tools · 0 res
· 0 prompts
permission surface via code analysis
tools
-
check_server
-
get_artifact_verify_findings
-
get_escalation_findings
-
get_high_risk_servers
-
get_injection_findings
-
get_integrity_findings
-
get_package_verify_findings
-
get_provenance_findings
-
get_shadowing_findings
-
get_ssrf_findings
-
get_trifecta_findings
-
list_discovered_servers
-
scan_mcp_servers
prompt-surface
shipped agent-instruction files + hidden-content / dangerous-code findings —
quoted from the analyzed source
analyzed commit 3dc9aad · analyzer v33 · 3d ago
skills & prompt files 3
danger signals2
- dynamic code execution unsafe yaml.load() saagpatel-MCPAudit-3dc9aad/src/mcp_audit/pinning.py :457
raw: Any = yaml.load(data.decode("utf-8"), Loader=_NoAliasSafeLoader) # noqa: S506 - loader subclasses SafeLoader - suspicious endpoint 169.254.169.254 (cloud metadata) saagpatel-MCPAudit-3dc9aad/tests/test_artifact_verify.py :72
assert not is_allowed_artifact_url("https://169.254.169.254/latest/meta-data/")
evidence-backed
findings quoted directly from the published source artifact — not inferred
code files: 165
filesystem 98
- fs (weak) saagpatel-MCPAudit-3dc9aad/examples/consumers/dashboard_summary.py :8
from pathlib import Path - fs (weak) saagpatel-MCPAudit-3dc9aad/examples/consumers/parse_report.py :8
from pathlib import Path - fs saagpatel-MCPAudit-3dc9aad/mcp_audit_build_backend.py :10
from pathlib import Path - fs (weak) saagpatel-MCPAudit-3dc9aad/scripts/generate_authorization_posture_schemas.py :6
from pathlib import Path - fs (weak) saagpatel-MCPAudit-3dc9aad/scripts/generate_enforcement_schemas.py :6
from pathlib import Path - fs (weak) saagpatel-MCPAudit-3dc9aad/scripts/generate_oauth_transcript_fixtures.py :7
from pathlib import Path - fs (weak) saagpatel-MCPAudit-3dc9aad/scripts/launch_preflight.py :8
import shutil - fs (weak) saagpatel-MCPAudit-3dc9aad/scripts/smoke_installed_artifact.py :7
from pathlib import Path - fs (weak) saagpatel-MCPAudit-3dc9aad/scripts/validate_delivery_evidence.py :14
from pathlib import Path - fs (weak) saagpatel-MCPAudit-3dc9aad/scripts/verify_release.py :16
from pathlib import Path - fs saagpatel-MCPAudit-3dc9aad/src/mcp_audit/agent_ui_cli.py :10
from pathlib import Path - fs saagpatel-MCPAudit-3dc9aad/src/mcp_audit/agent_ui_scanner.py :11
from pathlib import Path
show 28 more
- fs saagpatel-MCPAudit-3dc9aad/src/mcp_audit/authorization_posture_cli.py :6
from pathlib import Path - fs saagpatel-MCPAudit-3dc9aad/src/mcp_audit/authorization_posture_scanner.py :8
from pathlib import Path - fs saagpatel-MCPAudit-3dc9aad/src/mcp_audit/cache_contract_cli.py :6
from pathlib import Path - fs saagpatel-MCPAudit-3dc9aad/src/mcp_audit/cache_contract_scanner.py :10
from pathlib import Path - fs saagpatel-MCPAudit-3dc9aad/src/mcp_audit/cli.py :10
from pathlib import Path - fs saagpatel-MCPAudit-3dc9aad/src/mcp_audit/confighealth.py :14
from pathlib import Path - fs saagpatel-MCPAudit-3dc9aad/src/mcp_audit/connector.py :8
from pathlib import PurePath - fs saagpatel-MCPAudit-3dc9aad/src/mcp_audit/discovery/base.py :5
from pathlib import Path - fs saagpatel-MCPAudit-3dc9aad/src/mcp_audit/discovery/claude_code.py :5
from pathlib import Path - fs saagpatel-MCPAudit-3dc9aad/src/mcp_audit/discovery/claude_desktop.py :6
from pathlib import Path - fs saagpatel-MCPAudit-3dc9aad/src/mcp_audit/discovery/cursor.py :4
from pathlib import Path - fs saagpatel-MCPAudit-3dc9aad/src/mcp_audit/discovery/vscode.py :13
from pathlib import Path - fs saagpatel-MCPAudit-3dc9aad/src/mcp_audit/discovery/windsurf.py :5
from pathlib import Path - fs saagpatel-MCPAudit-3dc9aad/src/mcp_audit/enforcement_cli.py :7
from pathlib import Path - fs saagpatel-MCPAudit-3dc9aad/src/mcp_audit/engine.py :23
from pathlib import Path - fs saagpatel-MCPAudit-3dc9aad/src/mcp_audit/evidence_enforcement.py :18
from pathlib import Path - fs saagpatel-MCPAudit-3dc9aad/src/mcp_audit/integrity.py :28
import shutil - fs saagpatel-MCPAudit-3dc9aad/src/mcp_audit/monitor.py :10
from pathlib import Path - fs saagpatel-MCPAudit-3dc9aad/src/mcp_audit/oauth_transcript_cli.py :6
from pathlib import Path - fs saagpatel-MCPAudit-3dc9aad/src/mcp_audit/oauth_transcript_scanner.py :11
from pathlib import Path - fs saagpatel-MCPAudit-3dc9aad/src/mcp_audit/overrides.py :5
from pathlib import Path - fs saagpatel-MCPAudit-3dc9aad/src/mcp_audit/pinning.py :12
from pathlib import Path - fs saagpatel-MCPAudit-3dc9aad/src/mcp_audit/pkgverify.py :584
with _ARTIFACT_OPENER.open(req, timeout=_DOWNLOAD_TIMEOUT) as resp: # noqa: S310 (https + host allowlisted) - fs saagpatel-MCPAudit-3dc9aad/src/mcp_audit/policy.py :6
from pathlib import Path - fs saagpatel-MCPAudit-3dc9aad/src/mcp_audit/proof_capsule.py :11
from pathlib import Path - fs saagpatel-MCPAudit-3dc9aad/src/mcp_audit/proof_cli.py :6
from pathlib import Path - fs saagpatel-MCPAudit-3dc9aad/src/mcp_audit/proof_models.py :9
from pathlib import Path - fs saagpatel-MCPAudit-3dc9aad/src/mcp_audit/proof_observer.py :11
import shutil
58 more not shown — this panel samples each group; the count above is the real total.
shell / exec 21
- shell saagpatel-MCPAudit-3dc9aad/mcp_audit_build_backend.py :7
import subprocess - shell (weak) saagpatel-MCPAudit-3dc9aad/scripts/launch_preflight.py :9
import subprocess - shell (weak) saagpatel-MCPAudit-3dc9aad/scripts/verify_release.py :11
import subprocess - shell saagpatel-MCPAudit-3dc9aad/src/mcp_audit/monitor.py :7
import subprocess - shell saagpatel-MCPAudit-3dc9aad/src/mcp_audit/proof_capsule.py :10
import subprocess - shell saagpatel-MCPAudit-3dc9aad/src/mcp_audit/proof_observer.py :14
import subprocess - shell saagpatel-MCPAudit-3dc9aad/src/mcp_audit/proof_trust.py :9
import subprocess - shell saagpatel-MCPAudit-3dc9aad/src/mcp_audit/proofos_postgres.py :19
import subprocess - shell saagpatel-MCPAudit-3dc9aad/src/mcp_audit/safeforge_runtime.py :13
import subprocess - shell (weak) saagpatel-MCPAudit-3dc9aad/tests/test_agent_ui_audit.py :6
import subprocess - shell (weak) saagpatel-MCPAudit-3dc9aad/tests/test_api.py :13
import subprocess - shell (weak) saagpatel-MCPAudit-3dc9aad/tests/test_delivery_evidence.py :7
import subprocess
show 9 more
- shell (weak) saagpatel-MCPAudit-3dc9aad/tests/test_examples.py :7
import subprocess - shell (weak) saagpatel-MCPAudit-3dc9aad/tests/test_oauth_transcript_audit.py :7
import subprocess - shell (weak) saagpatel-MCPAudit-3dc9aad/tests/test_proof_attempt_evidence.py :8
import subprocess - shell (weak) saagpatel-MCPAudit-3dc9aad/tests/test_proof_before_action.py :10
import subprocess - shell (weak) saagpatel-MCPAudit-3dc9aad/tests/test_proofos_postgres.py :7
import subprocess - shell (weak) saagpatel-MCPAudit-3dc9aad/tests/test_release_metadata.py :8
import subprocess - shell (weak) saagpatel-MCPAudit-3dc9aad/tests/test_repo_hygiene.py :5
import subprocess - shell (weak) saagpatel-MCPAudit-3dc9aad/tests/test_safeforge_consumer.py :7
import subprocess - shell (weak) saagpatel-MCPAudit-3dc9aad/tests/test_skillscan.py :220
subprocess_line = "subprocess.run(['" + "wget" + "', remote])"
network 27
- net (weak) saagpatel-MCPAudit-3dc9aad/scripts/launch_preflight.py :12
import urllib.error - net saagpatel-MCPAudit-3dc9aad/src/mcp_audit/agent_ui_scanner.py :13
from urllib.parse import urlsplit - net saagpatel-MCPAudit-3dc9aad/src/mcp_audit/analyzer.py :5
from urllib.parse import urlparse - net saagpatel-MCPAudit-3dc9aad/src/mcp_audit/authorization_posture_models.py :10
from urllib.parse import unquote, urlsplit - net saagpatel-MCPAudit-3dc9aad/src/mcp_audit/cache_contract_scanner.py :870
"Do not cache results from requests carrying inputResponses or requestState.", - net saagpatel-MCPAudit-3dc9aad/src/mcp_audit/egress.py :38
from urllib.parse import urlparse - net saagpatel-MCPAudit-3dc9aad/src/mcp_audit/engine.py :19
import socket - net saagpatel-MCPAudit-3dc9aad/src/mcp_audit/oauth_transcript_models.py :9
from urllib.parse import urlsplit - net saagpatel-MCPAudit-3dc9aad/src/mcp_audit/oauth_transcript_scanner.py :13
from urllib.parse import urlsplit, urlunsplit - net saagpatel-MCPAudit-3dc9aad/src/mcp_audit/pkgverify.py :46
import urllib.error - net saagpatel-MCPAudit-3dc9aad/src/mcp_audit/proof_trust.py :14
from urllib.parse import urlsplit, urlunsplit - net saagpatel-MCPAudit-3dc9aad/src/mcp_audit/safeforge.py :389
from urllib.parse import urlsplit
show 15 more
- net saagpatel-MCPAudit-3dc9aad/src/mcp_audit/safeforge_consumer.py :610
from urllib.parse import urlsplit - net saagpatel-MCPAudit-3dc9aad/src/mcp_audit/safeforge_runtime.py :22
from urllib.parse import urlsplit - net saagpatel-MCPAudit-3dc9aad/src/mcp_audit/session_resume_lab.py :235
state = self.requests.get(request_id) - net saagpatel-MCPAudit-3dc9aad/src/mcp_audit/ssrf.py :13
from urllib.parse import urlparse - net (weak) saagpatel-MCPAudit-3dc9aad/tests/test_agent_ui_audit.py :5
import socket - net (weak) saagpatel-MCPAudit-3dc9aad/tests/test_api.py :12
import socket - net (weak) saagpatel-MCPAudit-3dc9aad/tests/test_artifact_verify.py :16
import urllib.error - net (weak) saagpatel-MCPAudit-3dc9aad/tests/test_authorization_posture.py :6
import socket - net (weak) saagpatel-MCPAudit-3dc9aad/tests/test_egress.py :5
import socket - net (weak) saagpatel-MCPAudit-3dc9aad/tests/test_oauth_transcript_audit.py :6
import socket - net (weak) saagpatel-MCPAudit-3dc9aad/tests/test_result_parcel_lab.py :9
import socket - net (weak) saagpatel-MCPAudit-3dc9aad/tests/test_safeforge_runtime.py :7
import socket - net (weak) saagpatel-MCPAudit-3dc9aad/tests/test_session_resume_lab.py :5
import socket - net (weak) saagpatel-MCPAudit-3dc9aad/tests/test_skillscan.py :177
"import requests", - net (weak) saagpatel-MCPAudit-3dc9aad/tests/test_task_time_machine.py :5
import socket
secrets 2
- secrets saagpatel-MCPAudit-3dc9aad/src/mcp_audit/engine.py :138
api_key = os.environ.get("ANTHROPIC_API_KEY", "") - secrets saagpatel-MCPAudit-3dc9aad/src/mcp_audit/proofos_postgres.py :11
import getpass
database 3
- db saagpatel-MCPAudit-3dc9aad/src/mcp_audit/proof_observer.py :12
import sqlite3 - db (weak) saagpatel-MCPAudit-3dc9aad/tests/test_proof_attempt_evidence.py :7
import sqlite3 - db (weak) saagpatel-MCPAudit-3dc9aad/tests/test_proof_before_action.py :9
import sqlite3
tool registrations 13
- scan_mcp_servers saagpatel-MCPAudit-3dc9aad/src/mcp_audit/server.py :106
- get_high_risk_servers saagpatel-MCPAudit-3dc9aad/src/mcp_audit/server.py :112
- check_server saagpatel-MCPAudit-3dc9aad/src/mcp_audit/server.py :123
- get_injection_findings saagpatel-MCPAudit-3dc9aad/src/mcp_audit/server.py :134
- get_ssrf_findings saagpatel-MCPAudit-3dc9aad/src/mcp_audit/server.py :153
- get_trifecta_findings saagpatel-MCPAudit-3dc9aad/src/mcp_audit/server.py :173
- get_shadowing_findings saagpatel-MCPAudit-3dc9aad/src/mcp_audit/server.py :207
- get_escalation_findings saagpatel-MCPAudit-3dc9aad/src/mcp_audit/server.py :225
- get_provenance_findings saagpatel-MCPAudit-3dc9aad/src/mcp_audit/server.py :250
- get_integrity_findings saagpatel-MCPAudit-3dc9aad/src/mcp_audit/server.py :276
- get_package_verify_findings saagpatel-MCPAudit-3dc9aad/src/mcp_audit/server.py :303
- get_artifact_verify_findings saagpatel-MCPAudit-3dc9aad/src/mcp_audit/server.py :331
show 1 more
- list_discovered_servers saagpatel-MCPAudit-3dc9aad/src/mcp_audit/server.py :359
declared dependencies 10
- mcp@>=2.0,<3.0
- click@>=8.3.3,<9.0
- rich@>=15.0.0
- anyio@>=4.0
- json5@>=0.10
- cryptography@>=50.0.0,<51.0
- pydantic@>=2.0
- pyyaml@>=6.0
- watchfiles@>=1.1.1
- anthropic@>=0.40