Skip to main content
Golf Scanner produces two types of output: scan results (server discovery) and audit results (security assessment). This page explains how to read both.

Output Formats

Styled terminal output with color-coded severity, boxed headers, and a summary table. Adapts to terminal width. Shows an animated progress spinner during audit (auto-disabled when piped).
golf-scanner audit

Scan Output

The scan command discovers MCP servers and reports where they were found.

JSON Fields

FieldTypeDescription
idestringIDE name (e.g., “Claude Code”, “Cursor”, “VS Code”)
usernamestringUser who owns this config (relevant for root scans)
scopestringConfig scope: user, project, workspace, system, local
config_pathstringAbsolute path to the configuration file
config_hashstringSHA-256 hash of the configuration file
project_pathstringProject directory (for project-scoped configs)
discovery_sourcestringHow the config was found (e.g., direct, claude_projects, vscode_workspaces)
serversarrayList of server entries in this config

Server Entry Fields

Each server entry includes:
FieldTypeDescription
namestringServer name from config
transportstringstdio, http, or sse
hoststringServer host (for HTTP/SSE)
cmdstringCommand (for STDIO)
argsarrayCommand arguments (sensitive values scrubbed)
envobjectEnvironment variables (sensitive values scrubbed)
file_modestringFile permissions of the config file
cmd_file_modestringFile permissions of the command binary
Argument scrubbing: Sensitive flags (--password, --token, --secret) are masked to ****. API key prefixes, high-entropy strings, URLs with credentials, and email addresses are also masked. Package names, environment variable references (${VAR}), and port numbers are preserved.

Audit Output

The audit command runs security checks and produces a structured report.

Report Structure

FieldTypeDescription
versionstringScanner version
scan_timestringISO 8601 UTC timestamp
serversarrayPer-server audit results
summaryobjectAggregate severity counts

Per-Server Result

FieldTypeDescription
namestringServer name from config
idestringIDE that configured it
scopestringConfig scope
typestringDetected server type (see Server Types)
scoreobjectSecurity score and risk assessment
findingsarrayIndividual check results
checks_runarrayCheck IDs that executed
checks_skippedarrayCheck IDs that were skipped

Score Object

FieldTypeDescription
statusstringgraded, attention_required, or unknown
overall_scorefloat0–100 risk score (after hard caps)
risk_levelstringLow (≥60), Moderate (>30), High (≤30), or null
hard_cap_appliedstringCRITICAL (cap 30) or HIGH (cap 59) if applied, or null
uncapped_scorefloatScore before hard caps
checks_with_dataintChecks that produced non-skip findings
checks_totalintTotal checks run

Finding Object

FieldTypeDescription
check_idstringCheck identifier (e.g., universal.credential_detection)
severitystringskip, note, medium, high, or critical
messagestringHuman-readable description
server_namestringServer name (optional)
locationstringFile path or URL (optional)
remediationstringHow to fix it (optional, shown with --verbose)
metadataobjectCheck-specific data (optional)

Summary Object

FieldTypeDescription
total_serversintTotal servers audited
criticalintServers with critical findings
highintServers with high findings
mediumintServers with medium findings
noteintServers with note-level findings only

Severity Levels

SeverityMeaningPer-Check ScoreWeightOverall Impact
criticalSevere vulnerability requiring immediate action0/1010.0xHard caps score at 30
highSignificant security issue2/107.5xHard caps score at 59
mediumModerate concern worth investigating4/105.0xReduces score
noteInformational — check passed10/101.0xNo impact
skipCheck not applicable to this server typeExcluded from scoring

Server Types

Golf Scanner classifies each server based on its transport and command:
TypeDisplay NameDescription
package_managerPackage ManagerLaunched via npx, bunx, uvx, pip, etc.
containerContainerRuns in Docker, Podman, or nerdctl
binaryLocal BinaryDirect binary execution (absolute path)
scriptScriptInterpreted code via Python, Node, etc.
unknown_stdioUnknown CommandSTDIO server with unrecognized command
local_httpLocal NetworkHTTP/SSE to localhost or private network
public_httpPublic ServerHTTP/SSE to public internet
unreachableUnreachableDNS resolution failed
unknownUnknownCannot determine type
The detected server type determines which checks apply. See the applicability matrix for details.

How Scoring Works

Golf Scanner computes a 0–100 risk score for each server through six steps:
  1. Per-check scoring: Each check produces findings. The worst severity across all findings for that check determines its per-check score (critical = 0/10, high = 2/10, medium = 4/10, note = 10/10).
  2. Severity-weighted average: Per-check scores are combined using severity weights. Worse findings carry disproportionately more weight — a critical finding has 10x the influence of a note.
  3. Scale to 0–100: The weighted average is normalized to a 0–100 scale.
  4. Hard caps: Any critical finding caps the score at 30. Any high finding caps the score at 59. The hard_cap_applied field tells you which cap was applied.
  5. Coverage gating: The score’s reliability depends on how many checks produced data:
    • Graded: Sufficient coverage (≥5 checks for STDIO servers, ≥3 for HTTP) — score is reliable
    • Attention required: Some data but insufficient coverage — score may be unreliable
    • Unknown: No checks produced data — cannot score
  6. Risk level assignment:
    • Low: Score ≥60
    • Moderate: Score >30
    • High: Score ≤30