· 1 observation
Technical updates · 1
Package or technical metadata updated
View technical comparison →SHYNGYS SHYNBOLATOV v3.0.0
npm package & vuln lookups
From the developer
Not specified in the available declarations: capabilities, limitations, pricing & account requirements.
Find npm packages for parsing CSV files
Developer declarations; not independently tested. Listing last checked Nov 7, 2026. Package observed Nov 6, 2026.
From the marketplace listing
Look up npm package metadata, known vulnerabilities, and CVE details directly from a conversation. NPMScan's MCP server gives AI agents read-only tools backed by the npm registry, OSV.dev, GitHub Security Advisories, GitHub's own API, and the NIST National Vulnerability Database: search packages by name or keyword with download counts, dependent-package counts, and typosquat detection on every result; inspect a package's install scripts, maintainers, license, GitHub stars, and download trend before installing, or compare 2-5 candidates side-by-side with a deterministic pick; check an exact version pinned in a lockfile, or simulate upgrading one before running npm install to see if it's a safe patch or a likely-breaking major bump; query vulnerabilities for one package or up to 100 at once, each finding enriched with severity, a summary, CVE aliases, and the fixed version rather than a bare advisory ID; audit an entire GitHub repository's dependencies (including monorepo workspaces) in one call, or generate a spec-valid CycloneDX/SPDX SBOM with vulnerability and license data embedded; rank the findings from a raw `npm audit --json` report by CISA KEV/FIRST EPSS exploitation data to know what to fix first, then pull the concrete, ordered remediation playbook for a flagged finding; check an npm maintainer account's publish history for a compromised-account-style cluster, or pull their basic profile; browse the latest npm advisories from either GitHub's curated, mostly CVE-backed reviewed set or its known-malicious-package malware feed, filterable by severity, vulnerability category (XSS, SQL/NoSQL Injection, SSRF, Access Control, Code Injection, and 15 more, reviewed only), affected package, or an exact GHSA/CVE ID; and look up authoritative CVSS/CWE data for any CVE across any ecosystem, enriched with CISA's Known Exploited Vulnerabilities status and FIRST.org's EPSS exploitation-probability score. No API key or authentication is required, and every result links back to the full write-up on npmscan.com.
Language: English · Automatically detected from descriptions.
Exact text from the indicated source. A mention alone does not establish support for your task.
Look up npm package metadata, known vulnerabilities, and CVE details directly from a conversation. NPMScan's MCP server gives AI agents read-only tools backed by the npm registry, OSV.dev, GitHub Security Advisories, GitHub's own API, and the NIST National Vulnerability Database: search packages by name or keyword with download counts, dependent-package counts, and typosquat detection on every result; inspect a package's install scripts, maintainers, license, GitHub stars, and download trend before installing, or compare 2-5 candidates side-by-side with a deterministic pick; check an exact version pinned in a lockfile, or simulate upgrading one before running npm install to see if it's a safe patch or a likely-breaking major bump; query vulnerabilities for one package or up to 100 at once, each finding enriched with severity, a summary, CVE aliases, and the fixed version rather than a bare advisory ID; audit an entire GitHub repository's dependencies (including monorepo workspaces) in one call, or generate a spec-valid CycloneDX/SPDX SBOM with vulnerability and license data embedded; rank the findings from a raw `npm audit --json` report by CISA KEV/FIRST EPSS exploitation data to know what to fix first, then pull the concrete, ordered remediation playbook for a flagged finding; check an npm maintainer account's publish history for a compromised-account-style cluster, or pull their basic profile; browse the latest npm advisories from either GitHub's curated, mostly CVE-backed reviewed set or its known-malicious-package malware feed, filterable by severity, vulnerability category (XSS, SQL/NoSQL Injection, SSRF, Access Control, Code Injection, and 15 more, reviewed only), affected package, or an exact GHSA/CVE ID; and look up authoritative CVSS/CWE data for any CVE across any ecosystem, enriched with CISA's Known Exploited Vulnerabilities status and FIRST.org's EPSS exploitation-probability score. No API key or authentication is required, and every result links back to the full write-up on npmscan.com.
· 1 observation
Package or technical metadata updated
View technical comparison →· 2 observations
Package or technical metadata updated
View technical comparison →· 4 observations
Supporting files updated; open the comparison for details. Skill instructions: added “If the user is instead choosing between candidates for something not yet installed ("should we add X," "X vs Y for this job"), that's a forward-looking pick,...”.
View comparison →Supporting files updated; open the comparison for details. Skill instructions changed from “## Input Accept dependency name+version pairs from: - Pasted `package.json` contents (use `dependencies`; only include `devDependencies` if the user asks to...” to “A forward-looking question about what to *add* rather than...
View comparison →Full description changed from “seven read-only tools backed by the npm registry, OSV.dev, GitHub Security Advisories, and the NIST National Vulnerability Database: search packages by name...” to “read-only tools backed by the npm registry, OSV.dev, GitHub Security Advisories, GitHub's own API, and the NIST National...
View comparison →Package or technical metadata updated
View technical comparison →· 1 observation
Full description changed from “seven read-only tools backed by the npm registry, OSV.dev, GitHub Security Advisories, and the NIST National Vulnerability Database: search packages by name...” to “read-only tools backed by the npm registry, OSV.dev, GitHub Security Advisories, GitHub's own API, and the NIST National...
View comparison →Find competitors to follow as you develop your plugin.
Scan an MCP server, package, or GitHub repo for a signed 0-100 trust score before your agent connects to it.
Shared terms: npm, package, advisorie, backed
Look up a known Agent Community member by exact name or slug, read the roughly-live community count, explicitly pre-register a proposed ....
Shared terms: lookup, count, exact, known
Public CVE lookups, dependency vulnerability checks, and CVE updates through an anonymous read-only MCP endpoint.
Shared terms: advisorie, api, cve, exact
Triage security vulnerabilities: by CVE id (how severe it is, whether it is being exploited, how likely exploitation is) or for a whole d...
Shared terms: advisory, cve, database, dependencie
Evidence-first security advisory triage with NVD, OSV, FIRST EPSS, and CISA KEV.
Shared terms: advisorie, advisory, candidate, cve
---
name: ci-pr-gate
description: Turn a dependency change — a before/after package.json/lockfile snapshot, or one or more named "bump X from A to B" upgrades — into one deterministic PASS/WARN/FAIL verdict formatted for a CI check or PR-comment bot, not a conversational report. Use when the user explicitly wants a mergeable/blocking verdict, a "CI gate," a PR status comment, or asks "should this PR be blocked," "is this safe to merge," "gate this dependency bump." Not for a plain explanation of what changed in a diff (dependency-audit's own snapshot-diff flow already covers that conversationally) and not for a single already-installed package's trust investigation (package-trust-check).
---
# CI PR gate
Use this skill only when the user wants a **verdict**, not a report — the
output is meant to be pasted directly into a CI check or a PR comment by a
bot, so it has to resolve to exactly one of PASS / WARN / FAIL every time,
even on partial or ambiguous data. `dependency-audit`'s existing
"Comparing two snapshots" flow already produces a good conversational
explanation of a `diff_dependencies` result for a human reading it in
chat — don't duplicate that here. This skill's only job is applying a fixed,
documented policy on top of the same tool output to produce a scannable
verdict instead, and packaging it for a bot persona: no hedging, no
follow-up questions, no "as an AI" framing, no options to weigh — one
verdict, ranked blocking reasons, done.
If the user wants to investigate whether one already-installed package is
compromised (not a PR's dependency change), use `package-trust-check`. If
they want to know what to actually *do* about a finding, hand off to
`incident-response`.
## Determining input shape
1. **Two full snapshots** (any mix of `package.json`, `package-lock.json`,
`yarn.lock`, `pnpm-lock.yaml`) pasted as a before/after pair — call
`diff_dependencies({ before, after })` directly.
2. **One or more named bumps with no full snapshots** — the common
Renovate/Dependabot PR-title shape ("Bump lodash from 3.10.1 to
4.17.21," "upgrade minimist to 1.2.6") — call
`simulate_dependency_upgrade({ packageName, currentVersion,
targetVersion })` once per named package. There is no batch variant of
this tool. Cap it at 25 packages in one turn; if more were named, run
the first 25 and say explicitly which were skipped rather than silently
dropping them.
3. **Both** (full snapshots plus one or more specific packages the user
wants a deeper semver/breaking-change read on beyond what a diff
computes) — run `diff_dependencies` first, then add
`simulate_dependency_upgrade` calls only for the specifically-named
packages. Don't run both tools for the same package by default; that's
redundant.
4. **Nothing parseable** — ask for the before/after content or the exact
`name@current→target` bump(s). Don't guess a version that wasn't given.
## Steps
1. Route per the table above and make the tool call(s).
2. Collect every vulnerability finding worth ranking from the results:
any entry with `vulnerabilityDelta` of `"introduced"` or
`"still-vulnerable"` (from either tool), taking `id`/severity from its
`vulnerabilities[]` array (diff) or `targetVulnerabilities[]` (simulate).
Deduplicate identical `{packageName, cveId}` pairs, then call
`prioritize_remediation({ findings })` once with all of them — even for
a single finding, since KEV status isn't visible from the raw severity
string alone.
3. Apply the [Gate policy](#gate-policy) below to every package checked,
deterministically. The overall verdict is the worst single-package
verdict (FAIL beats WARN beats PASS) — one failing package fails the
whole gate.
4. Produce the [Output contract](#output-contract) below. That is the
entire response — no preamble, no "let me check that for you," no
summary paragraph after it.
## Gate policy
Evaluate every rule for every package checked; the highest tier any rule
trigPreview of the first 4,000 characters. Read full instructions →
Referenced files: 2 — file references are metadata, not package contents.
---
name: dependency-audit
description: Audit a project's npm dependencies for known vulnerabilities and risky install scripts before installing, upgrading, or shipping. Use when the user pastes or attaches a package.json/lockfile, lists dependencies, or asks to check/audit/scan their packages for security issues — including comparing two snapshots (a PR diff) or checking license compliance.
---
# Dependency audit
Use this skill when the user wants a security check across multiple npm
packages at once (a `package.json`, a lockfile, or a plain list of
`name@version` pairs) — not for a question about a single package. A plain
factual single-package question ("what does X do") the model can answer
directly with `get_package` or `query_vulnerabilities`; a single-package
*trust* question ("is X safe," "was X compromised/hijacked") should use the
`package-trust-check` skill instead, which runs the deeper
maintainer-history and publish-provenance checks this skill deliberately
reserves for already-flagged packages only. A forward-looking question about
what to *add* rather than what's already installed ("should we add X," "X
vs Y vs Z for this job," "what should we use to do X") should use the
`new-dependency-evaluation` skill instead — it orchestrates
`compare_packages`/`suggest_alternative` for exactly that decision, which
this skill's per-inventory vulnerability/license flow isn't built for.
## Input
Accept dependency name+version pairs from:
- Pasted `package.json` contents (use `dependencies`; only include
`devDependencies` if the user asks to include dev dependencies — say
explicitly which set you audited).
- Pasted lockfile contents.
- Pasted CycloneDX JSON or SPDX JSON SBOM contents.
- A plain list the user typed, e.g. "lodash 4.17.15, express 4.17.1".
- Raw `npm audit --json` output (npm 7+'s `{vulnerabilities: {...}}` format,
or legacy npm 6's `{advisories: {...}}`) — do NOT re-parse this by hand
into a `packages` list for `batch_query_vulnerabilities`. Call
`enrich_npm_audit({ content })` directly instead: it parses the report
itself, resolves each finding's GHSA advisory to a CVE alias via OSV
(npm audit JSON almost never carries a CVE id on its own), and returns the
same patch-now/patch-soon/scheduled/monitor ranking as step 9 below in one
call — this replaces steps 1, 3, and 9 for the findings it covers, though
steps 4-8 (install scripts, maintainer/provenance checks, license
compliance) still need the package names it flagged run through those
tools separately, since npm audit's own JSON has no license/maintainer/
install-script data. `yarn audit --json`/`pnpm audit --json` are not
supported — treat those like a lockfile paste (step 1) instead.
- A GitHub repository URL (e.g. "audit https://github.com/owner/repo") — do
NOT ask the user to paste `package.json`/lockfile contents in this case.
Call `audit_github_repository({ url })` directly instead: it fetches the
manifest/lockfile from the repo's default branch itself and runs steps 3,
4, 6, and 8 below (vulnerability, install-script signal, license
compliance, and — for whatever it flagged as critical/high severity, a
possible typosquat, or deprecated — the `check_maintainer_changes`/
`check_package_provenance` ownership checks too, up to 5 packages per call,
prioritized the same way step 6 already ranks them) in one call, replacing
that part of the flow below. Check `ownershipCheckNote` for any flagged
package past that 5-package cap and call the two ownership tools on those
directly. Still follow up per-package with `analyze_install_script` (for a
package the tool's lighter `installScriptScanScope:
"lifecycle-scripts-only"` signal flagged but didn't deep-scan — check
`deepScanNote`) and `suggest_alternative` the same way you would from the
pasted-content flow.
If the user instead pastes **two** snapshots and asks what changed (a PR,
before/after, "did this upgrade introduce anything") — see
[Comparing twoPreview of the first 4,000 characters. Read full instructions →
Referenced files: 2 — file references are metadata, not package contents.
---
name: incident-response
description: Turn a flagged npm supply-chain finding — or just a vague, non-technical description of one ("this package looks sketchy," "someone said we got hacked," "npm install did something weird") — into concrete remediation steps. Use whenever the user wants to know what to actually do about a suspicious/compromised/flagged package, however precisely or vaguely they describe it — not for the initial trust/vulnerability investigation itself (see package-trust-check/dependency-audit for that).
---
# Incident response
Use this skill once the user wants to know what to actually *do* about a
supply-chain concern, not just what was found — whether that concern is a
precise tool finding already in this conversation, or just a worried,
non-technical description of a symptom. Most users will not know terms like
"lifecycle script" or a `rule` id, and will not think to run an npmscan tool
themselves first — reformulating a vague description into the right call is
this skill's job, not something to push back on the user for. This is the
last step, not a replacement for `package-trust-check` (single-package trust
questions) or `dependency-audit` (multi-package audits): those skills
investigate and report; this one turns a concern — precise or vague — into
an actionable plan.
## Reading a vague or non-technical request
Do not require the user to already know a `rule` id, a playbook name, or
npmscan's own vocabulary. Translate what they actually said using their
intent, not their exact words. Common shapes and what they map to:
| What the user says (any rough equivalent) | What to do |
|---|---|
| Names a specific package and says it's "sketchy," "hacked," "compromised," or just "is this safe" | Run `package-trust-check`'s investigation first (get_package, check_maintainer_changes, check_package_provenance, analyze_install_script as applicable) — you need real findings before a remediation plan means anything. Once findings exist, continue to step 2 below. |
| Names a package AND describes a specific symptom ("it downloads something during install," "the maintainer changed") | Run the one finding tool that actually checks that symptom (analyze_install_script for install-time behavior, check_maintainer_changes for ownership, check_package_provenance for publish/build mismatches) rather than the full trust-check sweep — faster, and still grounds the answer in a real finding. |
| Describes a symptom with NO package name — "what do we do about a postinstall that downloads a binary," "how do we respond to a typosquat," "what's the process for a maintainer takeover" | No finding tool has anything to check. Go straight to `get_remediation_playbook({ id: "..." })` with your best-guess playbook id from the table below. A wrong guess is harmless — it comes back `matched: false` — so guess confidently rather than asking the user to be more specific first. |
| Totally generic, no package, no symptom — "we got a security alert, what do I do," "help, is this bad" | The one case worth a single clarifying question: ask what specifically happened or which package/alert, since there is nothing yet to ground a plan in. Don't guess a playbook id from nothing. |
Symptom → playbook `id` guesses for the no-package-name case:
- downloads/runs a binary, executable, or installer during install → `postinstall-binary`
- name looks like / is close to a well-known package, "typosquat," "fake version of X" → `suspected-typosquat`
- general "hacked," "compromised," "malicious code," "supply chain attack" with no more specific detail → `supply-chain-compromise`
- runs shell commands, `exec`, spawns a process during install → `child-process-in-install`
- "calls out," "connects to a server," "phones home" during install → `unexpected-network-install`
- "new maintainer," "ownership changed," "ownership transfer," "ex-employee's account" → `maintainer-change-flagged`
- "provenance," "build doesn't match the repo," "install script wasn't iPreview of the first 4,000 characters. Read full instructions →
Referenced files: 2 — file references are metadata, not package contents.
---
name: new-dependency-evaluation
description: Help decide what to add as a NEW npm dependency — comparing 2-5 named candidates for the same job, evaluating one named candidate against its real peers, or shortlisting candidates from a described need, before anything is installed. Use for "which should we use for X," "axios vs got vs node-fetch," "is X a good pick for Y," "what should we use to do Z," "should we add X or is there something better." Not for auditing packages already in the project (see dependency-audit), not for a deep single-package compromise/trust investigation (see package-trust-check), and not for a plain factual question with no choice being made ("what does X do").
---
# New dependency evaluation
Use this skill when the user is making a **forward-looking choice** about
what to add to a project — not investigating something already installed.
It orchestrates two tools that already do the hard work individually:
`suggest_alternative` (turns one candidate name into a real shortlist of
peers) and `compare_packages` (fans out enrichment across 2-5 named
candidates and returns a structured side-by-side with a deterministic pick).
This skill's only job is routing to the right combination of the two based
on how many candidates the user actually named, then presenting the result.
If the user instead asks whether a package **already in their project** is
safe to keep, use `package-trust-check` (single package) or `dependency-audit`
(a pasted inventory) — those investigate what's already there; this skill
evaluates what to add next. If the question has no choice or decision angle
at all ("what does X do," "what's the latest version of X"), just answer
directly with `get_package` — don't invoke this skill's tool chain for that.
## Determining what to compare
Count how many named candidates the user actually gave, then route:
1. **2-5 named candidates for the same job** (e.g. "axios vs got vs
node-fetch," "should we use dayjs or date-fns") — go straight to
`compare_packages({ packages })`. This is the common case and needs no
extra tool call first.
2. **Exactly 1 named candidate** ("should we add uuid," "is left-pad a good
choice," "can we use X for Y") — a single package has nothing to be
compared against yet. Call `get_package({ name })` for the named
candidate's own `description` (`suggest_alternative`'s `source` object
doesn't include one), then `suggest_alternative({ name, reason:
"general", limit: 4 })` to generate real peers (never invent
plausible-sounding package names yourself). Screen the suggestions
against that description per
[Screening candidates before comparing](#screening-candidates-before-comparing-routing-cases-2-3)
below, then call `compare_packages` with `[name, ...screened
suggestions, up to 4]` so the original candidate is scored against real
competition instead of judged in isolation. If `suggestions` comes back
with fewer than 1 usable peer after screening (e.g. a built-in
replacement fully covers the case, like `left-pad` →
`String.prototype.padStart()`), skip `compare_packages` — there's
nothing left to compare — and report the `nonPackageAlternatives` plus
the `get_package` baseline on the named candidate instead.
3. **0 named candidates, just a described need** ("what should we use to
parse dates," "we need something for HTTP retries") — call
`search_packages({ query })` using the user's own description as the
query. Build a 2-5 name shortlist from the results, preferring the
highest `popularityTier`/`maintenanceTier` matches, skipping any result
carrying `possibleTyposquatOf`, and screening each result's
`description` against the user's *stated need* (their own words are the
comparison anchor here — no extra fetch needed) the same way as case 2
— then run `compare_packages` on that shortlist. If nothing in the
search results looks like a real contender (all very-low
popularity/stale, or nothinPreview of the first 4,000 characters. Read full instructions →
Referenced files: 2 — file references are metadata, not package contents.
---
name: package-trust-check
description: Investigate whether one specific npm package is trustworthy — maintainer/ownership takeover signals, publish-provenance mismatches, and risky install scripts. Use when the user asks if a single named package is safe, compromised, hijacked, suspicious, or "can I trust this" — not for auditing a full package.json/lockfile (see dependency-audit) and not for a plain factual question like "what does X do."
---
# Package trust check
Use this skill when the user names **one specific package** (optionally a
version) and asks a trust question about it — "is X safe to use," "was X
compromised," "should I be worried about X," "check X's maintainers." This
is a deep, single-package investigation: it runs checks dependency-audit
deliberately skips for every package in a batch because they're too
expensive to run at scale.
If the user instead pastes a `package.json`/lockfile/dependency list or asks
to audit multiple packages, use the `dependency-audit` skill instead — don't
run this skill's checks across a whole inventory. If the question is purely
factual with no trust/safety angle ("what does lodash do," "what's the
latest version of express"), just answer directly with `get_package` — don't
invoke the full investigation for that. If the user is instead choosing
between candidates for something not yet installed ("should we add X," "X
vs Y for this job"), that's a forward-looking pick, not a trust
investigation — use the `new-dependency-evaluation` skill.
## Steps
1. Baseline with `get_package` (or `get_package_version` if the user gave an
exact version). Pull `deprecated`, `maintenanceSummary`,
`possibleTyposquatOf`, `isLatestVersionVulnerable`/`highestSeverity`,
`downloadTrend`, and days-since-last-publish. This alone answers a good
chunk of "should I trust this" and grounds the deeper checks that follow —
don't skip straight to the maintainer/provenance tools without it.
2. Call `check_maintainer_changes({ name })`. It reconstructs maintainer
add/remove history from the npm packument and flags:
- a maintainer added recently who then published shortly after (the
account-takeover pattern behind the Sept 2025 chalk/debug "qix"
compromise and ua-parser-js),
- a full sudden replacement of the maintainer list,
- a long-standing maintainer quietly dropped,
- a maintainer-list change on npm not yet tied to any release — flag this
as the *more* urgent case, since access changed hands but nothing has
shipped with it yet, so there's no version to warn the user off of.
Also reports GitHub repository transfer/archival — a transfer isn't
automatically hostile (e.g. jade → pug was a documented rename), say so
rather than treating every transfer as a red flag.
3. Call `check_package_provenance({ name, version })`. Three checks in one
call: does the Sigstore build attestation's source repo/commit match
`package.json`'s declared repository; is this version missing provenance
while its npm-scope or maintainer peers consistently publish with it (a
real anomaly, not just "no provenance" — plenty of legitimate packages
predate the feature entirely, which this tool already accounts for via
the peer baseline); and does the tarball's actual install scripts/
dependencies match what's committed at the attested source commit — a
script or dependency on npm that was never committed in source is the
stolen-npm-token publish pattern. This is structural verification, not a
cryptographic re-check of the Sigstore bundle — say so if the user asks
how deep it goes.
4. If `get_package`/`get_package_version` in step 1 showed
`hasLifecycleScripts`/a `preinstall`/`postinstall`/`prepare` entry, follow
up with `analyze_install_script({ name, version })`. It fetches the
published tarball and statically scans the script — and the files it
references — against npmscan's red-flags rubric (child_process,
network calls, `.ssh`/`.aPreview of the first 4,000 characters. Read full instructions →
Referenced files: 2 — file references are metadata, not package contents.
Publisher declarations from the archived package. These are separate from our research and the live service's terms.
Package observed Nov 6, 2026.
plugin_asdk_app_6a6a699e6f3481918d5e6034432894f2
Download plugin data (JSON)Plugin details: freshly prepared. Prepared . Refreshed when plugin data changes or after 6 hours. Your account and Follow status are live.