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.
Available components
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
- Repository check failed: no source repository is declared. See how to fix → View diagnostics → Fail
- Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
- License check failed: the license (SEE LICENSE IN LICENSE) isn't a recognized OSI-approved license. See how to fix → Fail
- Actively maintained (last published 0 days ago).Pass
- Security-disclosure policy not yet verified: we couldn't inspect the source repository.Unverified
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
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
claude mcp add co-ship-safe-scanner -- npx -y @ship-safe/mcp
{
"mcpServers": {
"co-ship-safe-scanner": {
"command": "npx",
"args": [
"-y",
"@ship-safe/mcp"
]
}
}
} {
"servers": {
"co-ship-safe-scanner": {
"command": "npx",
"args": [
"-y",
"@ship-safe/mcp"
]
}
}
} codex mcp add co-ship-safe-scanner -- npx -y @ship-safe/mcp
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"co-ship-safe-scanner": {
"type": "local",
"command": [
"npx",
"-y",
"@ship-safe/mcp"
],
"enabled": true
}
}
} openclaw mcp add co-ship-safe-scanner --command npx --arg -y --arg @ship-safe/mcp
mcp_servers:
co-ship-safe-scanner:
command: "npx"
args: ["-y", "@ship-safe/mcp"] {
"McpServers": {
"co-ship-safe-scanner": {
"Transport": "stdio",
"Command": "npx",
"Arguments": [
"-y",
"@ship-safe/mcp"
]
}
}
} assistant mcp add co-ship-safe-scanner -t stdio -c npx -a -y @ship-safe/mcp
{
"mcpServers": {
"co-ship-safe-scanner": {
"command": "npx",
"args": [
"-y",
"@ship-safe/mcp"
]
}
}
} 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.
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 →
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 →
shipsafe_dast Probe a LIVE app you own for security issues (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.
| Name | Type | Req | Description |
|---|---|---|---|
| confirmOwnership | boolean | yes | Must be true. By setting it you confirm you own or operate this app and authorize a non-destructive probe. |
| extraPaths | array | – | 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… |
| maxRequests | number | – | Cap total HTTP requests (default 25). |
| url | string | yes | Base URL of the running app to probe, e.g. http://localhost:3000 or https://yourapp.com. |
| Name | Type | Req | Description |
|---|---|---|---|
| clean | boolean | yes | True only when no findings were returned AND every check observed the app (skippedChecks is empty). |
| counts | object | yes | – |
| findings | array | yes | – |
| notes | array | yes | – |
| requestsMade | number | yes | – |
| skippedChecks | array | yes | Checks that did not observe the app this run (crashed, unreachable, or answered by bot protection). Non-empty means clean is false. |
| target | string | yes | – |
| total | number | yes | – |
No examples provided.
shipsafe_fix_prompt Generate a one-paste 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.
| Name | Type | Req | Description |
|---|---|---|---|
| path | string | – | Directory to scan. Defaults to the current working directory. |
| Name | Type | Req | Description |
|---|---|---|---|
| findingCount | number | yes | How many findings the prompt covers; 0 means there was nothing to fix. |
| platform | string | – | The AI builder the prompt is written for, or 'manual'. |
| prompt | string | – | The paste-ready fix prompt, secrets redacted. Absent when there is nothing to fix. |
No examples provided.
shipsafe_login Log in to ShipSafe from your editor ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| device_code | string | – | The device_code returned by the first (no-argument) call. Pass it on the second call, after authorizing in the browser, to complete login. |
| Name | Type | Req | Description |
|---|---|---|---|
| deviceCode | string | – | Pass back as device_code on the next call (status authorize). |
| string | – | The account that logged in (status logged_in). | |
| plan | string | – | That account's plan, as sold (status logged_in). |
| status | string | yes | authorize: open verificationUrl and enter userCode, then call again with deviceCode. logged_in: done. pending: not authorized yet; call again. |
| userCode | string | – | The code the user enters at verificationUrl (status authorize). |
| verificationUrl | string | – | Where the user authorizes this login (status authorize). |
No examples provided.
shipsafe_report_false_positive Report a finding as a 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.
| Name | Type | Req | Description |
|---|---|---|---|
| file | string | – | File path the finding was reported on. |
| line | number | – | Line number of the finding. |
| reason | string | – | Why it's a false positive (helps the team tune the rule). |
| ruleId | string | yes | The ruleId of the finding being reported (from a scan result, e.g. 'secrets/public-env-secret-exposed'). |
| severity | string | – | The finding's severity, as the scan reported it. |
| snippet | string | – | The flagged code. Redacted before sending. |
| title | string | – | The finding's title. |
| Name | Type | Req | Description |
|---|---|---|---|
| reported | boolean | yes | True when ShipSafe recorded the report. |
| ruleId | string | yes | The rule that was reported. |
No examples provided.
shipsafe_scan Scan code for security vulnerabilities ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| ai | boolean | – | 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. |
| changedOnly | boolean | – | 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. |
| path | string | – | Directory to scan. Defaults to the current working directory. |
| paths | array | – | Scan only these files/dirs (relative to path, inside the project), e.g. the files you just edited. Faster than a full scan. |
| severity | string | – | Only return findings at or above this severity. |
| upload | boolean | – | Save this scan to the user's ShipSafe dashboard (needs login) and return a shareable dashboardUrl. Off by default. |
| Name | Type | Req | Description |
|---|---|---|---|
| clean | boolean | yes | True 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… |
| counts | object | yes | – |
| dashboardUrl | string | – | Set when upload:true succeeded: a shareable link to this scan in the dashboard. |
| diff | object | yes | Change 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… |
| findings | array | yes | – |
| notes | array | yes | – |
| scanned | object | yes | – |
| total | number | yes | – |
No examples provided.
shipsafe_scan_api Test a live API for IDOR / broken object-level authorization ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| accountA | object | – | TEST account A credentials (used with `login`). |
| accountB | object | – | TEST account B credentials (used with `login`). |
| baseUrl | string | yes | API base URL, e.g. https://api-preprod.yourapp.com. |
| confirmOwnership | boolean | yes | Must be true: you own/operate this API and these are test accounts you authorize testing. |
| login | object | – | 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… |
| resources | array | yes | The resources to test for cross-user access. |
| tokenA | string | – | Bearer token for TEST account A. Provide this OR `login` + accountA to fetch it automatically. |
| tokenB | string | – | Bearer token for TEST account B. Provide this OR `login` + accountB to fetch it automatically. |
| Name | Type | Req | Description |
|---|---|---|---|
| findings | array | yes | – |
| idorCount | number | yes | – |
| missingAuthCount | number | yes | – |
| notes | array | yes | – |
| unchecked | array | yes | Checks 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 Scan git history for committed secrets ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| maxCommits | number | – | How many commits back from HEAD to scan (default 100). Lower it for a faster pass on huge repos. |
| path | string | – | Git repository directory to scan. Defaults to the current working directory. |
| Name | Type | Req | Description |
|---|---|---|---|
| clean | boolean | yes | True when no committed secrets were found in the scanned history. |
| findings | array | yes | – |
| isGitRepo | boolean | yes | False when the path isn't a git repository (then total is 0). |
| notes | array | yes | – |
| removedFromHead | number | yes | How many secrets are gone from the current tree but still in history: the urgent, must-rotate-and-purge ones. |
| total | number | yes | – |
No examples provided.
shipsafe_scan_url Scan a LIVE deployed app you own (headers + leaked client secrets) ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| confirmOwnership | boolean | yes | Must be true: confirms you own/operate this app and authorize a non-destructive scan. |
| maxAssets | number | – | Cap how many JS assets to fetch and scan (default 20). |
| url | string | yes | The deployed app URL, e.g. https://yourapp.com or http://localhost:3000. |
| validateSecrets | boolean | – | 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… |
| Name | Type | Req | Description |
|---|---|---|---|
| assetsScanned | number | yes | – |
| baasExposure | array | – | Present when validateSecrets:true: BaaS resources (Supabase Storage buckets / RPC, Firebase Realtime DB / Firestore) proven readable by an anonymous visitor. |
| clean | boolean | yes | True only when there are no leaked secrets, no exposed source maps, no DAST findings, AND every stage observed the app (skippedChecks is empty). |
| dast | array | yes | – |
| exposedSourceMaps | array | yes | – |
| leakedSecrets | array | yes | – |
| liveSecrets | array | – | Present when validateSecrets:true: which leaked provider keys actually work right now. |
| notes | array | yes | – |
| requestsMade | number | yes | – |
| skippedChecks | array | yes | Checks that did not observe the app this run (crashed, unreachable, or answered by bot protection). Non-empty means clean is false. |
| supabaseExposure | array | – | Present when validateSecrets:true: Supabase tables proven readable by an anonymous internet visitor (RLS not enforced). |
| target | string | yes | – |
No examples provided.
shipsafe_status Show ShipSafe login + scan quota ~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.
| Name | Type | Req | Description |
|---|---|---|---|
| aiScans | object | – | The AI-scan allowance, when it could be fetched. |
| string | – | The account's email, when logged in. | |
| loggedIn | boolean | yes | Whether a ShipSafe login is saved on this machine. |
| plan | string | – | The plan's name as sold: Free, Solo, Shield, Growth or Pro Audit. |
| quotaRefreshed | boolean | yes | False when the quota could not be fetched (not logged in, or offline). |
No examples provided.
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.