Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

ShipSafe — Independent security verification

NPM · @SHIP-SAFE/MCP · 2 COMPONENTS · SCANNED SEP 26

Independent security review for AI-built apps: exposed secrets, broken auth, unsafe data access.

62 Trust /100
Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security98
  • No malware found by supply-chain analysis.Pass
  • No known CVEs affecting this package version or its production dependencies.Pass
  • No install/post-install scripts declared.Pass
  • 39 of 123 dependencies flagged as unhealthy (1 deprecated). View diagnostics → Partial
Provenance & Transparency6
Schema Quality & AI Usability67
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 2207 tokens (~245/item across 9 items; 9 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management13
  • Stability observed for 4 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
  • Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • We read all 9 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
  • An AI judge read all 9 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Install

How do I install the ShipSafe — Independent security verification MCP server?

ShipSafe — Independent security verification runs locally as an npm package, launched with npx -y @ship-safe/mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

npm · @ship-safe/mcp

# add to Claude Code
claude mcp add co-ship-safe-scanner -- npx -y @ship-safe/mcp
// .cursor/mcp.json
{
  "mcpServers": {
    "co-ship-safe-scanner": {
      "command": "npx",
      "args": [
        "-y",
        "@ship-safe/mcp"
      ]
    }
  }
}
// .vscode/mcp.json
{
  "servers": {
    "co-ship-safe-scanner": {
      "command": "npx",
      "args": [
        "-y",
        "@ship-safe/mcp"
      ]
    }
  }
}
# add to Codex CLI
codex mcp add co-ship-safe-scanner -- npx -y @ship-safe/mcp
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "co-ship-safe-scanner": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "@ship-safe/mcp"
      ],
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add co-ship-safe-scanner --command npx --arg -y --arg @ship-safe/mcp
# ~/.hermes/config.yaml
mcp_servers:
  co-ship-safe-scanner:
    command: "npx"
    args: ["-y", "@ship-safe/mcp"]
// ~/.netclaw/config/netclaw.json
{
  "McpServers": {
    "co-ship-safe-scanner": {
      "Transport": "stdio",
      "Command": "npx",
      "Arguments": [
        "-y",
        "@ship-safe/mcp"
      ]
    }
  }
}
# add to Vellum
assistant mcp add co-ship-safe-scanner -t stdio -c npx -a -y @ship-safe/mcp
// mcp.json
{
  "mcpServers": {
    "co-ship-safe-scanner": {
      "command": "npx",
      "args": [
        "-y",
        "@ship-safe/mcp"
      ]
    }
  }
}
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 25 Sept 26 +26
    • Stability: 0.07 → unverified ▼ security
    • Tool safety: pass → unverified ▼ security
    • Malware scan: unverified → pass ▲ security
    • Known CVEs: unverified → pass ▲ security
    • Capabilities: pass → unverified ▼ functional
    • Tool coverage: 100 → unverified ▼ functional
    • Tool coverage: 56% → 100% ▲ functional
    • Dependency health: unverified → 0.85 ▲ functional
    • First check of Schema quality: unverified functional
    • Package version: 0.6.2 → 0.6.3 functional
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 24 Sept 26 −10
    • Known CVEs: pass → unverified ▼ security
    • Stability: 0.03 → unverified ▼ security
    • Tool safety: pass → unverified ▼ security
    • Malware scan: unverified → pass ▲ security
    • Dependency health: 0.85 → unverified ▼ functional
    • Capabilities: pass → unverified ▼ functional
    • Tool coverage: 100 → unverified ▼ functional
    • First check of Schema quality: unverified functional
    • Package version: 0.6.0 → 0.6.2 functional
    • Package version: 0.6.0 → 0.6.1 functional
  • 23 Sept 26 −15
    • Malware scan: pass → unverified ▼ security
    • Stability: unverified → 0.03 ▲ functional
    • Package version: 0.5.3 → 0.6.0 functional
  • 22 Sept 26 61

    First indexed and scored.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 26 Sept 2026 · Analysed npm/@ship-safe/mcp@0.6.3

Provenance No attestation

The registry publishes no build provenance for this version, so there is nothing to verify.

Result No attestation
Ecosystem npm

Background: How many MCP packages publish verified provenance →

Dependencies 123 packages
Packages resolved 123
Deprecated 1
Stale 38
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 9 exposed · ~2,207 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
shipsafe_dast ~360

Run a non-destructive dynamic scan against a RUNNING app (your localhost dev server or a deployed URL you own). Unlike the static scan (which reads source), this makes real GET requests to find issues only visible at runtime: missing security headers (CSP, HSTS, clickjacking), insecure cookies (Secure/HttpOnly/SameSite), CORS misconfiguration and leaked stack traces. It is read-only (GET only, bounded request count, gentle rate) and never sends payloads that change data. CONSENT REQUIRED: only probe an app you own or operate; you MUST pass confirmOwnership:true. NOTE: probing for exposed files the app never linked (/.env, /.git/config, backups, /admin), and anything in extraPaths, are unsolicited requests, so they run only when the human operator has set SHIPSAFE_MCP_ALLOW_ACTIVE_PROBE=true in their MCP config — a tool argument cannot turn them on. The result says which tier actually ran. Use after deploying, or against your local dev server before shipping.

NameTypeReqDescription
confirmOwnershipbooleanyesMust be true. By setting it you confirm you own or operate this app and authorize a non-destructive probe.
extraPathsarray–Additional SAME-ORIGIN paths to check for accidental exposure, e.g. ['/api/internal', '/uploads']. Anything that resolves off the target's origin is skipped and reported, and the whole list runs only…
maxRequestsnumber–Cap total HTTP requests (default 25).
urlstringyesBase URL of the running app to probe, e.g. http://localhost:3000 or https://yourapp.com.
NameTypeReqDescription
cleanbooleanyesTrue only when no findings were returned AND every check observed the app (skippedChecks is empty).
countsobjectyes–
findingsarrayyes–
notesarrayyes–
requestsMadenumberyes–
skippedChecksarrayyesChecks that did not observe the app this run (crashed, unreachable, or answered by bot protection). Non-empty means clean is false.
targetstringyes–
totalnumberyes–

No examples provided.

shipsafe_fix_prompt ~90

Scan the project and generate a single paste-ready prompt that fixes ALL findings at once, tailored to the detected AI builder (Cursor, Lovable, Bolt, v0). Requires a login on a monthly plan (`shipsafe login`). Use when the user wants one prompt to hand to their AI tool to fix everything.

NameTypeReqDescription
pathstring–Directory to scan. Defaults to the current working directory.
NameTypeReqDescription
findingCountnumberyesHow many findings the prompt covers; 0 means there was nothing to fix.
platformstring–The AI builder the prompt is written for, or 'manual'.
promptstring–The paste-ready fix prompt, secrets redacted. Absent when there is nothing to fix.

No examples provided.

shipsafe_login ~117

Log in to ShipSafe without leaving the editor, to unlock AI deep analysis and fix prompts. Two steps: call with NO arguments to start; you'll get a URL and a code to authorize in the browser. After authorizing, call again with the returned `device_code` to finish. The free local + dependency scan works without logging in.

NameTypeReqDescription
device_codestring–The device_code returned by the first (no-argument) call. Pass it on the second call, after authorizing in the browser, to complete login.
NameTypeReqDescription
deviceCodestring–Pass back as device_code on the next call (status authorize).
emailstring–The account that logged in (status logged_in).
planstring–That account's plan, as sold (status logged_in).
statusstringyesauthorize: open verificationUrl and enter userCode, then call again with deviceCode. logged_in: done. pending: not authorized yet; call again.
userCodestring–The code the user enters at verificationUrl (status authorize).
verificationUrlstring–Where the user authorizes this login (status authorize).

No examples provided.

shipsafe_report_false_positive ~221

Tell ShipSafe that a finding it reported is a false positive. This sends the rule + context to ShipSafe's central false-positive database (shared with the web app and CLI) so the team can tune the rule and stop it from misfiring. Use when you and the user agree a finding is wrong, not a real issue. Requires a ShipSafe login. The code snippet is redacted before sending; no secrets leave the machine.

NameTypeReqDescription
filestring–File path the finding was reported on.
linenumber–Line number of the finding.
reasonstring–Why it's a false positive (helps the team tune the rule).
ruleIdstringyesThe ruleId of the finding being reported (from a scan result, e.g. 'secrets/public-env-secret-exposed').
severitystring–The finding's severity, as the scan reported it.
snippetstring–The flagged code. Redacted before sending.
titlestring–The finding's title.
NameTypeReqDescription
reportedbooleanyesTrue when ShipSafe recorded the report.
ruleIdstringyesThe rule that was reported.

No examples provided.

shipsafe_scan ~385

Scan a project directory for security vulnerabilities using ShipSafe: exposed secrets, injection, broken auth/access control (IDOR), misconfiguration, and known-vulnerable dependencies (CVEs found in package-lock.json/pnpm-lock.yaml/yarn.lock/requirements.txt/go.sum/Gemfile.lock). A fast local pattern + dependency scan runs for free with no login; with a login it can also run AI deep analysis (automatic on paid plans; a free account includes one AI scan — pass ai: true). Returns plain-English findings (each with the exact fix) AND structured output: a `clean` boolean + severity `counts` you can branch on, plus a `diff` (for full-project scans) showing what your last fix resolved vs what's still open. Pass `paths` or `changedOnly:true` to scan just the files you edited for a fast inner loop. Use right after writing or changing code, and again after fixing to confirm the issues are gone. The user's code is never stored.

NameTypeReqDescription
aiboolean–Run AI deep analysis (needs a login via shipsafe_login or `shipsafe login`; a free account includes one AI scan). Defaults on for paid plans, off otherwise.
changedOnlyboolean–Scan only files changed vs git HEAD plus new untracked files. Falls back to a full scan if the directory isn't a git repo.
pathstring–Directory to scan. Defaults to the current working directory.
pathsarray–Scan only these files/dirs (relative to path, inside the project), e.g. the files you just edited. Faster than a full scan.
severitystring–Only return findings at or above this severity.
uploadboolean–Save this scan to the user's ShipSafe dashboard (needs login) and return a shareable dashboardUrl. Off by default.
NameTypeReqDescription
cleanbooleanyesTrue when no findings came back at the requested severity from the files that were scanned. False when findings were returned, OR when total is 0 but nothing was actually scanned (every requested pat…
countsobjectyes–
dashboardUrlstring–Set when upload:true succeeded: a shareable link to this scan in the dashboard.
diffobjectyesChange vs your previous FULL scan of this directory, over the local pattern findings at ALL severities (a different, broader population than `clean`/`counts`, which honor the severity filter and incl…
findingsarrayyes–
notesarrayyes–
scannedobjectyes–
totalnumberyes–

No examples provided.

shipsafe_scan_api ~399

Test a running API you own for IDOR / BOLA (OWASP API #1, the #1 vuln AI builders ship): can one logged-in user read ANOTHER user's objects by changing the ID? You provide TWO test-account bearer tokens (A and B) and the resource endpoints; for each resource, user A lists their own objects, then user B tries to read them by ID. A 200 = a real IDOR. Also flags collections readable with no token. Read-only (GET only), bounded. CONSENT REQUIRED. Use TWO DISPOSABLE TEST ACCOUNTS on a non-production environment, never real customer IDs. Provide two bearer tokens, OR test-account credentials plus a `login` config and ShipSafe fetches the tokens for you (Supabase Auth or a generic JWT endpoint). Tokens are used read-only and never stored.

NameTypeReqDescription
accountAobject–TEST account A credentials (used with `login`).
accountBobject–TEST account B credentials (used with `login`).
baseUrlstringyesAPI base URL, e.g. https://api-preprod.yourapp.com.
confirmOwnershipbooleanyesMust be true: you own/operate this API and these are test accounts you authorize testing.
loginobject–Auto-login config: with accountA/accountB, ShipSafe fetches both test tokens for you. Supabase Auth or a generic JWT-returning endpoint only; cookie/session auth (Clerk, NextAuth) is not supported, p…
resourcesarrayyesThe resources to test for cross-user access.
tokenAstring–Bearer token for TEST account A. Provide this OR `login` + accountA to fetch it automatically.
tokenBstring–Bearer token for TEST account B. Provide this OR `login` + accountB to fetch it automatically.
NameTypeReqDescription
findingsarrayyes–
idorCountnumberyes–
missingAuthCountnumberyes–
notesarrayyes–
uncheckedarrayyesChecks that never reached the API (blocked, failed, or nothing to test). Non-empty means the result is NOT clean.

No examples provided.

shipsafe_scan_history ~213

Scan a local git repository's COMMIT HISTORY for secrets that were ever committed: API keys, service-role keys, tokens, secret-named env vars. This catches the dangerous case a normal scan can't see: a credential that was committed and later deleted from the current files but still lives in git history (anyone who clones the repo can recover it). Read-only and fully local; it reads past file versions with git and never writes or pushes. Findings flagged `removedFromHead` are the urgent ones: gone from your code, still in history, so the credential must be rotated AND the history purged (e.g. git filter-repo / BFG). Use after a repo has handled secrets, before going public, or when onboarding an existing repo.

NameTypeReqDescription
maxCommitsnumber–How many commits back from HEAD to scan (default 100). Lower it for a faster pass on huge repos.
pathstring–Git repository directory to scan. Defaults to the current working directory.
NameTypeReqDescription
cleanbooleanyesTrue when no committed secrets were found in the scanned history.
findingsarrayyes–
isGitRepobooleanyesFalse when the path isn't a git repository (then total is 0).
notesarrayyes–
removedFromHeadnumberyesHow many secrets are gone from the current tree but still in history: the urgent, must-rotate-and-purge ones.
totalnumberyes–

No examples provided.

shipsafe_scan_url ~380

Scan a RUNNING deployed app you own in one shot: (1) the DAST runtime probe (security headers, CSP quality, clickjacking) AND (2) the high-value check a source scan can miss: it fetches the deployed CLIENT JS bundles (entry + lazy-loaded chunks) and scans them for SECRETS leaked into the browser. AI builders (Lovable, Bolt, v0) routinely inline API keys at build time, so the leak exists only in the deployed artifact, not the repo. Also flags publicly accessible source maps (original source recoverable). Read-only (GET only, bounded, gentle). CONSENT REQUIRED: only scan an app you own; pass confirmOwnership:true. Secret VALUES are redacted in the output. NOTE: exposed-path probing and validateSecrets send unsolicited requests to the target or to a third party, so they run only when the human operator set SHIPSAFE_MCP_ALLOW_ACTIVE_PROBE=true in their MCP config; a tool argument cannot turn them on, and the result says which tier ran.

NameTypeReqDescription
confirmOwnershipbooleanyesMust be true: confirms you own/operate this app and authorize a non-destructive scan.
maxAssetsnumber–Cap how many JS assets to fetch and scan (default 20).
urlstringyesThe deployed app URL, e.g. https://yourapp.com or http://localhost:3000.
validateSecretsboolean–Opt-in: for each provider key found leaked in the client bundle, make ONE read-only call to that provider (OpenAI/Stripe/GitHub/SendGrid/Slack/GitLab) to prove whether it's LIVE or revoked. The key i…
NameTypeReqDescription
assetsScannednumberyes–
baasExposurearray–Present when validateSecrets:true: BaaS resources (Supabase Storage buckets / RPC, Firebase Realtime DB / Firestore) proven readable by an anonymous visitor.
cleanbooleanyesTrue only when there are no leaked secrets, no exposed source maps, no DAST findings, AND every stage observed the app (skippedChecks is empty).
dastarrayyes–
exposedSourceMapsarrayyes–
leakedSecretsarrayyes–
liveSecretsarray–Present when validateSecrets:true: which leaked provider keys actually work right now.
notesarrayyes–
requestsMadenumberyes–
skippedChecksarrayyesChecks that did not observe the app this run (crashed, unreachable, or answered by bot protection). Non-empty means clean is false.
supabaseExposurearray–Present when validateSecrets:true: Supabase tables proven readable by an anonymous internet visitor (RLS not enforced).
targetstringyes–

No examples provided.

shipsafe_status ~42

Show whether the user is logged in to ShipSafe, their plan, and remaining AI scan quota. Use this to check if AI deep analysis is available before scanning.

Input schema present but exposes no named parameters.

NameTypeReqDescription
aiScansobject–The AI-scan allowance, when it could be fetched.
emailstring–The account's email, when logged in.
loggedInbooleanyesWhether a ShipSafe login is saved on this machine.
planstring–The plan's name as sold: Free, Solo, Shield, Growth or Pro Audit.
quotaRefreshedbooleanyesFalse when the quota could not be fetched (not logged in, or offline).

No examples provided.

Common questions

What is the ShipSafe — Independent security verification MCP server?

ShipSafe — Independent security verification is an MCP server listed in the public MCP registry as co.ship-safe/scanner. Independent security review for AI-built apps: exposed secrets, broken auth, unsafe data access. This page covers its npm package (@ship-safe/mcp).

Is the ShipSafe — Independent security verification MCP server safe to use?

ShipSafe — Independent security verification scores 62 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 26 September 2026. It declares no install or post-install scripts. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the ShipSafe — Independent security verification MCP server expose?

ShipSafe — Independent security verification exposes 9 tools: shipsafe_scan, shipsafe_fix_prompt, shipsafe_status, shipsafe_scan_history, shipsafe_dast, and 4 more. Their descriptions and schemas cost roughly 2,207 tokens of context every time the server is loaded.

Is the ShipSafe — Independent security verification MCP server still maintained?

ShipSafe — Independent security verification is still listed as active in the MCP registry. We last reached this channel on 26 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.