Atlas / MCP servers / yawlabs / npmjs-mcp

npmjs-mcpCAUTION

mcp/yawlabs/npmjs-mcp

npm registry MCP server — package intelligence, security audits, and dependency analysis for AI assistants

Verdict
CAUTION
Grade
B
Trust score
85 /100
Exposed tools
66 39r · 17w · 10d
Transport
stdio
License
MIT
Stars
2
01

Overview

From the repository's own README, as read at the audited commit. Badges and raw HTML are left out.

[](https://yaw.sh/mcp/install?name=npm&command=npx&args=-y%2C%40yawlabs%2Fnpmjs-mcp&description=npm%20registry%20-%20package%20intel%2C%20security%2C%20dependency%20analysis%2C%20write%20ops&source=https%3A%2F%2Fgithub.com%2FYawLabs%2Fnpmjs-mcp)

One click adds this to your local Yaw MCP config so it's available in every Yaw Terminal session. Or install manually below.

[](https://www.npmjs.com/package/@yawlabs/npmjs-mcp) [](https://opensource.org/licenses/MIT) [](https://github.com/YawLabs/npmjs-mcp/stargazers)

Run npm registry operations from Claude Code, Cursor, and any MCP client. 64 tools covering the full registry surface: package intelligence, security audits, dependency analysis, org/team management, and the write ops that normally fight you locally (npm deprecate, npm dist-tag, npm owner, npm unpublish).

Built and maintained by Yaw Labs.

Why this one?

Other npm MCP servers wrap npm search and call it done. This one doesn't.

  • Full registry HTTP surface — 64 tools across reads, writes, orgs, teams, hooks, provenance, trusted publishers, and ops health. Not just npm view.
  • Write ops that actually work in agents — npm_deprecate, npm_undeprecate, npm_dist_tag_set, npm_unpublish_version go directly to the HTTP API with a Granular Access Token that has 2FA bypass. No 2FA prompts, no --otp hunts, no ENEEDAUTH from a session-bound .npmrc. (Since 2026-07-31 npm requires an interactive 2FA challenge for owner, access, team membership and grant, org membership and token changes even with 2FA bypass; for those tools the error names the exact npm command a human runs.)
  • Agent-aware failure surfacing — npm_check_auth and `npm_publ
Read from source at commit 87c1574a637eOBSERVED · 2026-10-11
02

Connect

Built from this server's own package name, version and transport as found in its source — not copied from anyone's documentation, so it cannot drift against a page we do not control. Replace the environment placeholders with a token scoped to the least it needs.

claude-code (npm)
claude mcp add npmjs-mcp -- npx -y @yawlabs/[email protected]
03

Exposed tools (66)

39 read · 17 write · 10 destructive. Blast radius: 10 tools can delete or overwrite — an agent that can be talked into calling a tool can be talked into calling this one.

ToolRiskDescription
devsreaddev team
expressreadFast web framework
npm_access_setwriteSet package access level:
npm_access_set_mfawriteConfigure 2FA requirement for publishing:
npm_auditreadQuick vulnerability check for specific packages and versions using the bulk advisory API. Returns matching advisories with severity, CVEs, and patched versions.
npm_audit_deepwriteFull security audit on a dependency set — returns detailed advisories with CVSS scores, CWEs, affected version ranges, fix recommendations, and full vulnerability metadata.
npm_check_authreadQuick auth health check — returns structured data about npm auth status, token capability, and whether headless (CI/agent) publishing is possible.
npm_collaboratorsreadGet all users who have access to a package and their permission levels (read-only, read-write).
npm_comparereadCompare 2-5 packages side-by-side — downloads, version, license, maintainers, size, last publish, and security status. Great for
npm_dep_treereadResolve the production dependency tree for a package version (up to a configurable depth). Shows the full transitive dependency graph with versions.
npm_dependenciesreadGet the dependency lists for a specific package version — production deps, devDeps, peerDeps, and optionalDeps.
npm_deprecatewriteDeprecate a package or specific versions. Shows a warning message on install.
npm_dist_tag_removedestructiveRemove a dist-tag from a package. The
npm_dist_tag_setwritePoint a dist-tag (e.g.
npm_dist_tagsreadGet dist-tags for a package (latest, next, beta, etc).
npm_downloadsreadGet total download count for a package over a period (last-day, last-week, last-month, last-year, or a custom date range like 2025-01-01:2025-12-31).
npm_downloads_bulkreadCompare download counts for multiple packages over a period. Up to 128 packages.
npm_downloads_rangereadGet daily download counts for a package over a period. Returns per-day breakdown.
npm_healthreadAssess the health of a package — maintenance activity, download trend, security status, deprecation, and documentation quality.
npm_hook_addwriteCreate a registry webhook. Target is
npm_hook_getreadGet a single webhook by its ID. The stored secret is redacted from the response.
npm_hook_listreadList webhooks. Optionally filter by package name. Secrets are redacted from responses.
npm_hook_removedestructiveDelete a webhook by ID.
npm_hook_updatewriteReplace a webhook
npm_license_checkreadCheck the license of a package and its direct production dependencies. Flags missing or non-standard licenses.
npm_maintainerswriteGet current maintainers and their publish history for a package.
npm_ops_playbookreadReturn canonical recipes for common npm operations — which MCP tool to call for which op,
npm_org_member_removedestructiveRemove a user from an org. Their team memberships in that org are also removed.
npm_org_member_setwriteAdd a user to an org or change their role. Roles:
npm_org_membersreadList all members of an npm organization with their roles (owner, admin, developer). Requires authentication as an org member.
npm_org_packagesreadList all packages accessible to an npm organization with their access levels. Shows what the org owns or has been granted access to.
npm_org_teamsreadList all teams within an npm organization. Requires authentication as an org member.
npm_owner_addwriteAdd a user as a maintainer of a package. They will have publish and write permissions.
npm_owner_removedestructiveRemove a user from a package
npm_packagereadGet package metadata — description, dist-tags, latest version, maintainers, license, repository, keywords. Does not include per-version details (use npm_version for that).
npm_package_accesswriteGet package access settings — visibility (public/private), whether publish requires 2FA, and whether automation tokens can bypass 2FA.
npm_profilereadGet the authenticated user
npm_provenancereadRetrieve Sigstore attestations for a specific package version. Shows SLSA provenance (which CI built it, from which repo/commit)
npm_publish_preflightwriteComprehensive pre-publish validation — run before publishing ANY npm package.
npm_readmereadGet the README content of a package.
npm_recent_changesreadGet the most recent package publishes/updates from the npm registry via the CouchDB changes feed. Note: uses replicate.npmjs.com which may have intermittent availability.
npm_registry_statsreadGet total npm-wide download counts for a period. Shows overall registry activity.
npm_release_frequencywriteAnalyze the release cadence of a package — publish timeline, gaps, and whether the project is actively maintained.
npm_searchreadSearch the npm registry for packages. Supports text search and qualifiers like
npm_signing_keysreadGet the npm registry
npm_team_createwriteCreate a team inside an organization. Team is passed as
npm_team_deletedestructiveDelete a team. Team is passed as
npm_team_grantwriteGrant a team read-only or read-write permission on a package. Scope and team are passed as
npm_team_member_addwriteAdd a user to a team. Team is
npm_team_member_removedestructiveRemove a user from a team. Team is
npm_team_membersreadList all members of a team with their roles (e.g.
npm_team_packagesreadList all packages a specific team has access to and their permission levels (read-only or read-write). Useful for auditing team permissions.
npm_team_revokedestructiveRevoke a team
npm_token_revokedestructiveRevoke an access token by its key (UUID from npm_tokens). Requires confirm: true.
npm_tokensreadList all access tokens for the authenticated npm user. Shows token type, creation date, CIDR restrictions, and read-only status.
npm_trusted_publishersreadList trusted publishing configurations for a package. Shows OIDC trust relationships with CI/CD providers
npm_typesreadCheck TypeScript type support for a package — whether it ships built-in types (types/typings field) or has a DefinitelyTyped companion (@types/* package).
npm_undeprecatedestructiveClear the deprecation message from a package or specific versions. Equivalent to
npm_unpublish_packagedestructiveUnpublish an ENTIRE package (all versions). DELETE /{pkg}/-rev/{rev}.
npm_unpublish_versionreadUnpublish a specific version of a package. IRREVERSIBLE: once unpublished, the version
npm_user_packagesreadList all packages published by a specific npm user. Shows package names and the user
npm_verify_tokenreadVerify the NPM_TOKEN and surface its capabilities — username, 2FA status, and whether
npm_versionreadGet detailed metadata for a specific version — dependencies, dist info, file count, size, deprecation status.
npm_version_downloadsreadGet download counts broken down by version for the last week. Shows version adoption.
npm_versionswriteList published versions of a package with their publish dates, ordered newest first. Returns up to
npm_whoamireadCheck the currently authenticated npm user. Verifies the NPM_TOKEN is valid and returns the associated username. Essential for debugging auth issues before publishing.
04

Trust audit

CAUTIONgrade B · trust 85/100 Install with care. The audit found things worth knowing before you trust its output.

LayerWhat it checksResult
L0Provenance & inventoryPASS
L1Static analysis of the codeFAIL
L2Instruction surface (what it tells the agent)PASS
L3Class-specific surfaceWARN
L4Behavioural (sandbox)SKIPPED

What the source does

Filesystem
declared (2 observation(s))
Network
declared (8 observation(s))
Shell
declared (3 observation(s))
Dependencies
not all pinned
Secrets in source
none-found

Findings (11)

HIGHFilesystem / path · fs.credential_store · CWE-22, CWE-59
scripts/update-manifests.mjs:210
const SSH = 'ssh -i ~/.ssh/gh_woods -o IdentitiesOnly=yes';
Why it matters. touches a credential store
MEDIUMFilesystem / path · mcp.destructive_tools · CWE-22, CWE-59
npm_dist_tag_remove, npm_hook_remove, npm_org_member_remove, npm_owner_remove, npm_team_delete, npm_team_member_remove, npm_team_revoke, npm_token_revoke, npm_undeprecate, npm_unpublish_package
Why it matters. 10 tool(s) can delete or overwrite
Fix. prefer a read-only mode or scoped tokens; the page states the blast radius
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
src/launcher.test.ts:61
return new Function(`${pieces}\nreturn runtimePlan;`)() as RuntimePlan;
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
src/launcher.test.ts:66
return new Function(`${pieces}\nreturn { pickNewest, floor: OAM_MIN };`)() as {
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
src/launcher.test.ts:168
const pipesStdio = new Function(
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
src/launcher.test.ts:185
const childEnv = new Function(
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWCode injection · code.eval_exec · CWE-78, CWE-94, CWE-95
src/launcher.test.ts:219
const sandboxFlags = new Function(
Why it matters. evaluates text as code
Fix. remove; use a parser or a dispatch table
LOWFilesystem / path · fs.traversal · CWE-22, CWE-59
src/api.test.ts:332
for (const p of ["last-week/../../-/v1/search", "../../etc/passwd", "last-week/foo"]) {
LOWSupply chain · supply.unpinned · CWE-829, CWE-1357
package.json
@biomejs/biome, @modelcontextprotocol/sdk, @types/node, esbuild, postject, typescript, zod
Why it matters. 7 dependency range(s) float
Fix. pin exact versions or ship a lockfile
LOWPrompt injection · prompt.transfer_instruction · CWE-94, CWE-1427
CHANGELOG.md:29
- **The bundled MCP SDK moves from 1.30.0 to 1.32.1** (GHSA-6qxp-vccf-f47h, high: the SDK's OAuth client could send credentials to an authorization server chosen by the MCP server; this server does no
Why it matters. an instruction to move sensitive data to an outside destination
Fix. remove; a skill never needs the user's secrets off the machine
LOWPrompt injection · prompt.transfer_instruction · CWE-94, CWE-1427
CHANGELOG.md:357
- **Every release is published to the Official MCP Registry.** A new `server.json` names the server `io.github.YawLabs/npmjs-mcp` with the npm package as its one stdio-transport package, `package.json
Why it matters. an instruction to move sensitive data to an outside destination
Fix. remove; a skill never needs the user's secrets off the machine

Gates applied: no_behavioural_pass.

Audited 2026-10-11 · audit v0.4.1 · source sha 87c1574a637efull audit observations/trust-audit/mcp-server/yawlabs__npmjs-mcp.json · Report an issue / request a re-scan
05

Audit history

Every audit this server has had. A grade with a past is a grade somebody is still checking.

DateSourceVerdictGradeScoreChange
2026-10-1187c1574a637eCAUTIONB85first audit
06

Questions

What is the npmjs-mcp MCP server?

npm registry MCP server — package intelligence, security audits, and dependency analysis for AI assistants

What tools does npmjs-mcp expose?

66 in total: 39 read-only, 17 that write, and 10 that can delete or overwrite (npm_dist_tag_remove, npm_hook_remove, npm_org_member_remove, npm_owner_remove, npm_team_delete). Every one is listed on this page with its risk.

Is npmjs-mcp safe to connect to an agent?

With care. The audit graded it B (85/100) and found 11 things worth knowing before you trust this server, listed below with the exact line each was found on. Separately from the audit: 10 of its tools can destroy data, so scope the token you give it to what you actually need.

What credentials does npmjs-mcp need?

It reads GH_TOKEN, GITHUB_TOKEN, NPM_TOKEN and SSH_KEYGEN from the environment. Give it a token scoped to the least it needs — an agent that can be talked into calling a tool can be talked into calling it with your credentials.

How does npmjs-mcp run?

It speaks stdio, so it runs as a local process your client starts. It is published on npm as @yawlabs/npmjs-mcp at 0.17.0.

How current is this page?

The grade is for one exact copy of the source (87c1574a637e), read on 2026-10-11. The repository is watched and re-audited when it changes.

Advertisement