Skip to main content
Golf Scanner runs 20 security checks against each MCP server.
Check IDNameDescription
type.detectionServer TypeClassifies the server as package manager, container, binary, script, or HTTP based on command and transport. All other checks depend on its output.
universal.command_sanitizationCommand SafetyDetects dangerous patterns in command and args: privilege escalation, shell injection, network downloads, dynamic code execution, and temp path usage.
universal.credential_detectionCredentialsFinds plaintext credentials in args, URLs, and environment variables — AWS keys, GitHub/Stripe/Anthropic/OpenAI tokens, JWTs, URL credentials, and sensitive env var names.
universal.registry.verificationRegistry ListingChecks whether the server is listed in the official MCP Registry.
universal.github.trustGitHub TrustEvaluates trust signals — archived status, last activity, license, stars, contributor count. Cross-validates repo URLs across sources.
script.locationScript LocationFlags scripts running from unsafe locations like /tmp or home directories.
script.permissionsScript PermissionsDetects world-writable scripts.
binary.locationBinary LocationEvaluates binary path safety — system paths, /opt, home dirs, temp dirs, and unknown locations.
binary.permissionsBinary PermissionsDetects world-writable or group-writable binaries.
container.isolationContainer IsolationFlags --privileged mode, dangerous capabilities (SYS_ADMIN), host namespace sharing, missing --cap-drop, and writable filesystems.
container.volumesContainer VolumesFlags dangerous volume mounts — root filesystem, /etc, Docker socket, SSH keys, cloud credentials, and kube config.
container.imageContainer ImageChecks whether images use digest pinning (@sha256:) vs mutable tags. Looks for Sigstore attestations.
container.registry.existenceContainer RegistryVerifies the container image exists in its OCI registry. Flags digest mismatches as possible tampering.
container.registry.signatureContainer SignatureChecks whether the image has a cosign signature with keyless/Fulcio certificates.
package.vulnerabilityVulnerabilitiesQueries OSV.dev for known CVEs and malware in npm/PyPI packages. Severity mapped from CVSS score.
package.typosquattingTyposquattingDetects similarly-named packages that could indicate a typosquatting attack.
package.distributionDistributionEvaluates package adoption — download counts and package age.
package.repositorySource RepositoryChecks whether the package links to a source repository. Cross-checks npm, PyPI, deps.dev, and MCP Registry.
package.unscoped_variantUnscoped VariantFor scoped npm packages (@scope/pkg): checks if the unscoped variant has known malware or vulnerabilities.
http.oauthOAuthFor public HTTP/SSE servers: discovers OAuth/OIDC configuration. Flags missing authentication and HTTP-only endpoints.

Check Applicability by Server Type

Not all checks apply to all server types. The scanner automatically skips checks that don’t apply and marks them as skip in findings.
Server TypeApplicable Checks
Package Manager (npx, bunx, uvx…)Server Type, Command Safety, Credentials, Registry Listing, Vulnerabilities, Typosquatting, Distribution, Source Repository, Unscoped Variant, GitHub Trust
Container (docker, podman…)Server Type, Command Safety, Credentials, Container Isolation, Container Volumes, Container Image, Container Registry, Container Signature, Registry Listing, GitHub Trust
BinaryServer Type, Command Safety, Credentials, Binary Location, Binary Permissions, Registry Listing, GitHub Trust
Script (python, node…)Server Type, Command Safety, Credentials, Script Location, Script Permissions, Registry Listing, GitHub Trust
Public HTTP/SSEServer Type, Credentials, Registry Listing, GitHub Trust, OAuth
Local HTTP/SSEServer Type, Credentials

Checklist IDs

Each finding includes a checklist_id in its metadata field. These IDs identify the exact sub-check that triggered the finding.

ST — Server Type

IDSeverityDescription
ST-1.1skipPackage manager server detected
ST-1.2noteContainer runtime (Docker, Podman)
ST-1.3noteLocal binary
ST-1.4mediumScript-based server
ST-1.5mediumUnknown command — not recognized
ST-2.1mediumLocal/private network server
ST-2.3note / highPublic server — note if HTTPS, high if unencrypted HTTP
ST-2.5highUnreachable server — URL missing or invalid

UC-1 — Command Safety

IDSeverityDescription
UC-1.1criticalSudo / administrator privileges requested
UC-1.2criticalShell injection metacharacters (;, &&, ||, $(, backtick, ${)
UC-1.3highNetwork download commands (curl, wget, netcat, fetch, aria2c, axel)
UC-1.4highShell execution (bash/sh/zsh -c)
UC-1.5highDynamic execution (--exec, -e, eval, exec())
UC-1.6highTemporary paths (/tmp/, /var/tmp/, /dev/shm/)

UC-2 — MCP Registry Verification

IDSeverityDescription
UC-2.1noteListed in Official MCP Registry (active)
UC-2.2highRemoved from Official MCP Registry
UC-2.3mediumNot listed in Official MCP Registry

UC-3 — GitHub Trust

IDSeverityDescription
UC-3.1note / medium / highRepository trust evaluation — note if well-established, medium for limited trust signals, high if archived
UC-3.2highRepository URL mismatch across sources (possible supply chain attack)

CD-1 — Credential Detection

IDSeverityDescription
CD-1.1criticalHardcoded credentials — AWS keys, GitHub/Stripe/Slack/Anthropic/OpenAI tokens, Google API keys
CD-1.2highHigh-sensitivity tokens — GitLab PATs, JWTs
CD-1.3mediumGeneric API key with common prefix (sk-, api_, key_, token_) or env var credential reference
CD-1.5criticalCredentials embedded in URL (://user:pass@host)

SC-1 — Script Location

IDSeverityDescription
SC-1.1criticalScript in temporary location (/tmp, /var/tmp, /dev/shm)
SC-1.2mediumScript in user home directory
SC-1.3note / highLocation OK (note), or could not determine path (high)

SC-2 — Script Permissions

IDSeverityDescription
SC-2.1critical / high / noteWorld-writable (critical), permissions unavailable (high), permissions OK (note)

BN-1 — Binary Location

IDSeverityDescription
BN-1.1noteBinary in protected system location (/usr/bin, /usr/local/bin)
BN-1.2mediumBinary in /opt directory
BN-1.3mediumBinary in user home directory
BN-1.4criticalBinary in temporary location (/tmp, /var/tmp, /dev/shm)
BN-1.5highNon-absolute path or unknown location

BN-2 — Binary Permissions

IDSeverityDescription
BN-2.1critical / noteWorld-writable (critical), permissions OK (note)
BN-2.2highGroup-writable binary

CT-1 — Container Isolation

IDSeverityDescription
CT-1.1critical / noteRuns with --privileged (critical), isolation OK (note)
CT-1.2criticalDangerous capabilities added (SYS_ADMIN, ALL, SYS_PTRACE, NET_ADMIN)
CT-1.3criticalShares host namespaces (--pid=host, --network=host)
CT-1.4mediumNo --cap-drop to restrict capabilities
CT-1.5mediumWritable filesystem (no --read-only)

CT-2 — Container Volumes

IDSeverityDescription
CT-2.1high / noteRoot filesystem mounted (high), volume configuration OK (note)
CT-2.2highMounts /etc (system configuration)
CT-2.3highMounts Docker socket — container escape risk
CT-2.4highMounts sensitive credentials (~/.ssh, ~/.aws, ~/.kube)

CT-3 — Container Image Pinning

IDSeverityDescription
CT-3.1noteImage uses SHA256 digest pinning
CT-3.2mediumImage uses mutable tag (not digest-pinned)
CT-3.3mediumImage uses implicit :latest tag

CT-4 — Sigstore Attestation

IDSeverityDescription
CT-4.1noteSigstore attestation verified
CT-4.2noteNo Sigstore attestation found

CT-5 — Container Registry

IDSeverityDescription
CT-5.1noteImage verified in registry
CT-5.2criticalImage digest mismatch — possible tampering
CT-5.3highImage not found in registry

CT-6 — Container Signature

IDSeverityDescription
CT-6.1noteCosign signature detected
CT-6.2noteKeyless (Fulcio) signature with certificate
CT-6.3mediumNo cosign signature found

PH-3 — OAuth / HTTP Auth

IDSeverityDescription
PH-3.1criticalPublic server returns data without authentication
PH-3.2noteNon-OAuth authentication detected (401/403 without OAuth metadata)
PH-3.3noteServer implements OAuth/OpenID Connect
PH-3.4highNo OAuth discovery endpoints and auth status undetermined

PM-1 — Package Vulnerabilities

IDSeverityDescription
PM-1.1criticalCritical vulnerability (CVSS ≥ 9.0)
PM-1.2highHigh vulnerability (CVSS 7.0–8.9)
PM-1.3mediumModerate vulnerability (CVSS 4.0–6.9)
PM-1.4noteLow vulnerability (CVSS < 4.0)

PM-2 — Package Malware

IDSeverityDescription
PM-2.1criticalKnown malware detected

PM-3 — Source Repository

IDSeverityDescription
PM-3.1criticalNo source repository linked to package
PM-3.3noteSource repository verified

PM-5 — Typosquatting

IDSeverityDescription
PM-5.1high / noteSimilar package names detected (high), none detected (note)

PM-6 — Package Distribution

IDSeverityDescription
PM-6.1high / medium / noteVery low downloads (high), low downloads or young package (medium), adoption OK (note)

PM-8 — Unscoped Variant

IDSeverityDescription
PM-8.1high / mediumMalware in unscoped variant (high), vulnerabilities in unscoped variant (medium)