Skip to main content
Glama

ZAP MCP Server

by LisBerndt
docker-entrypoint.sh5.43 kB
#!/usr/bin/env sh set -eu : "${ZAP_LOG_LEVEL:=INFO}" : "${ZAP_STARTUP_TIMEOUT:=120}" READY_URL="http://localhost:8080/JSON/core/view/version" echo "[entrypoint] Configuring Firefox for headless mode (no X11 display needed)" # Set Firefox to run in headless mode without X11 export MOZ_HEADLESS=1 export MOZ_DISABLE_CONTENT_SANDBOX=1 export MOZ_DISABLE_GMP_SANDBOX=1 export MOZ_DISABLE_RDD_SANDBOX=1 export MOZ_DISABLE_GPU_SANDBOX=1 export MOZ_DISABLE_SOCKET_PROCESS_SANDBOX=1 export MOZ_DISABLE_UTILITY_SANDBOX=1 # Create Firefox profile directory and configuration FIREFOX_PROFILE_DIR="/home/zap/.mozilla/firefox/headless" mkdir -p "$FIREFOX_PROFILE_DIR" # Create Firefox prefs.js to force headless mode cat > "$FIREFOX_PROFILE_DIR/prefs.js" << 'EOF' // Force headless mode user_pref("browser.dom.window.dump.enabled", true); user_pref("browser.laterrun.enabled", false); user_pref("browser.shell.checkDefaultBrowser", false); user_pref("browser.startup.page", 0); user_pref("browser.startup.homepage", "about:blank"); user_pref("browser.startup.homepage_override.mstone", "ignore"); user_pref("browser.tabs.warnOnClose", false); user_pref("browser.tabs.warnOnCloseOtherTabs", false); user_pref("browser.tabs.warnOnOpen", false); user_pref("browser.warnOnQuit", false); user_pref("dom.disable_beforeunload", true); user_pref("dom.disable_open_during_load", false); user_pref("dom.max_script_run_time", 0); user_pref("dom.max_chrome_script_run_time", 0); user_pref("extensions.autoDisableScopes", 0); user_pref("extensions.enabledScopes", 0); user_pref("extensions.update.enabled", false); user_pref("general.warnOnAboutConfig", false); user_pref("media.navigator.enabled", false); user_pref("media.peerconnection.enabled", false); user_pref("network.manage-offline-status", false); user_pref("offline-apps.allow_by_default", false); user_pref("security.tls.insecure_fallback_hosts", ""); user_pref("toolkit.telemetry.enabled", false); user_pref("toolkit.telemetry.unified", false); user_pref("toolkit.telemetry.server", ""); user_pref("toolkit.telemetry.archive.enabled", false); user_pref("toolkit.telemetry.newProfilePing.enabled", false); user_pref("toolkit.telemetry.shutdownPingSender.enabled", false); user_pref("toolkit.telemetry.updatePing.enabled", false); user_pref("toolkit.telemetry.bhrPing.enabled", false); user_pref("toolkit.telemetry.firstShutdownPing.enabled", false); user_pref("toolkit.telemetry.coverage.enabled", false); user_pref("toolkit.coverage.opt-out", true); user_pref("toolkit.coverage.endpoint.base", ""); user_pref("browser.ping-centre.telemetry", false); user_pref("browser.newtabpage.activity-stream.feeds.telemetry", false); user_pref("browser.newtabpage.activity-stream.telemetry", false); user_pref("browser.ping-centre.telemetry", false); user_pref("toolkit.telemetry.hybridContent.enabled", false); user_pref("toolkit.telemetry.newProfilePing.enabled", false); user_pref("toolkit.telemetry.shutdownPingSender.enabled", false); user_pref("toolkit.telemetry.updatePing.enabled", false); user_pref("toolkit.telemetry.bhrPing.enabled", false); user_pref("toolkit.telemetry.firstShutdownPing.enabled", false); user_pref("toolkit.telemetry.coverage.enabled", false); user_pref("toolkit.coverage.opt-out", true); user_pref("toolkit.coverage.endpoint.base", ""); user_pref("browser.ping-centre.telemetry", false); user_pref("browser.newtabpage.activity-stream.feeds.telemetry", false); user_pref("browser.newtabpage.activity-stream.telemetry", false); user_pref("browser.ping-centre.telemetry", false); user_pref("toolkit.telemetry.hybridContent.enabled", false); EOF # Create Firefox profiles.ini cat > "/home/zap/.mozilla/firefox/profiles.ini" << 'EOF' [Install4F96D1934A9F5E70] Default=headless Locked=1 [Profile0] Name=headless IsRelative=1 Path=headless Default=1 EOF echo "[entrypoint] Firefox headless configuration created" # Test Firefox headless mode echo "[entrypoint] Testing Firefox headless mode..." if firefox --headless --version >/dev/null 2>&1; then echo "[entrypoint] ✅ Firefox headless mode working correctly" else echo "[entrypoint] ⚠️ Firefox headless test failed, but continuing..." fi echo "[entrypoint] Cleanup stale locks & broken addons (safe)" rm -f /home/zap/.ZAP/*.lck /home/zap/.ZAP/*.lock /home/zap/.ZAP/.ZAP.lock 2>/dev/null || true rm -f /home/zap/.ZAP/plugin/*.zap* 2>/dev/null || true echo "[entrypoint] Starting ZAP (no API key, bind 0.0.0.0:8080)" # Set JVM options via JAVA_OPTS environment variable export JAVA_OPTS="-Djava.awt.headless=true -Dsun.java2d.xrender=false -Dsun.java2d.noddraw=true -Dsun.java2d.opengl=false -Dsun.java2d.pmoffscreen=false -Dsun.java2d.d3d=false -Dsun.java2d.ddoffscreen=false" # Start ZAP with headless mode and no X11 dependencies /zap/zap.sh \ -daemon \ -host 0.0.0.0 \ -port 8080 \ -config api.disablekey=true \ -config api.addrs.addr.name=.* \ -config api.addrs.addr.regex=true \ -config logger.level="${ZAP_LOG_LEVEL}" & echo "[entrypoint] Waiting for ZAP to be ready (timeout: ${ZAP_STARTUP_TIMEOUT}s)" end=$(( $(date +%s) + ZAP_STARTUP_TIMEOUT )) while :; do code=$(curl -s -o /dev/null -w '%{http_code}' "$READY_URL" || true) [ "$code" = "200" ] || [ "$code" = "403" ] && break [ "$(date +%s)" -ge "$end" ] && { echo >&2 "[entrypoint] ZAP failed to start within timeout"; exit 1; } sleep 2 done echo "[entrypoint] ZAP is up." echo "[entrypoint] Starting app: $*" exec "$@"

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/LisBerndt/zap-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server