Skip to main content
Glama
YawLabs

@yawlabs/npmjs-mcp

by YawLabs

@yawlabs/npmjs-mcp

npm version License: MIT GitHub stars

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.

Add to Yaw MCP

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

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 agentsnpm_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 surfacingnpm_check_auth and npm_publish_preflight detect a non-interactive context and hand back a human-runnable command, and every write error names what was sent and the npm CLI equivalent, instead of looping on unrecoverable errors.

  • Safety by defaultnpm_unpublish_* requires confirm: true. npm_owner_remove blocks you from locking yourself out. npm_deprecate rejects a message over the registry's 1024-character limit before sending it.

  • Ops playbook built innpm_ops_playbook returns the canonical tool-vs-CLI-vs-CI decision matrix so your agent picks the right path on the first try.

  • Tool annotations — every tool declares readOnlyHint, destructiveHint, idempotentHint, and openWorldHint, so MCP clients can skip confirmation on safe ops.

  • No API key required for reads — search, packages, downloads, security, dep tree, licenses all work anonymously. Auth is opt-in via NPM_TOKEN.

  • Instant startup — ships as a single bundled file with zero runtime dependencies. No 5-minute node_modules install.

  • Input hardening — package names, scopes, versions, dist-tags, and team names are all regex-validated against npm's actual constraints. Defends against CRLF and path-traversal in URL construction.

Related MCP server: npm-registry-mcp

Quick start

1. Create .mcp.json in your project root

macOS / Linux / WSL:

{
  "mcpServers": {
    "npm": {
      "command": "npx",
      "args": ["-y", "@yawlabs/npmjs-mcp@latest"]
    }
  }
}

Windows:

{
  "mcpServers": {
    "npm": {
      "command": "cmd",
      "args": ["/c", "npx", "-y", "@yawlabs/npmjs-mcp@latest"]
    }
  }
}

Why the extra step on Windows? Since Node 20, child_process.spawn cannot directly execute .cmd files (that's what npx is on Windows). Wrapping with cmd /c is the standard workaround.

2. Restart and approve

Restart Claude Code (or your MCP client) and approve the npm MCP server when prompted.

3. (Optional) Add your npm token for write operations

Read-only tools work without any setup. For write tools (deprecate, dist-tag, owner, team_*, org_member_*, unpublish, hook_*, access_set*, token_revoke), add NPM_TOKEN to the env block:

{
  "mcpServers": {
    "npm": {
      "command": "npx",
      "args": ["-y", "@yawlabs/npmjs-mcp@latest"],
      "env": {
        "NPM_TOKEN": "npm_xxxxxxxxxxxx"
      }
    }
  }
}

Use a Granular Access Token scoped to just the packages and orgs you want your agent to manage.

That's it. Now ask your AI assistant:

"Deprecate my-old-pkg 1.x with a pointer to v2"

"What's the dep tree for fastify look like three levels deep?"

"Audit express for known CVEs and tell me the fix"

"Who are the maintainers of next.js and when did each one last publish?"

Configuration

Environment variable

Default

Description

NPM_TOKEN

(none)

npm access token. Required only for write/auth/org/access/hooks tools. Use a Granular Access Token (with 2FA bypass for headless writes); classic tokens, including Automation tokens, were revoked in December 2025.

NPM_REGISTRY

https://registry.npmjs.org

Alternate registry (enterprise/private). Must support the npm HTTP API shape.

NPM_REQUEST_TIMEOUT_MS

30000

Timeout for each attempt of a registry request, in milliseconds, including reading the body. A read retries a timeout, a network error, or HTTP 429/502/503/504, up to 3 attempts in all, so a stalled read can take about three times this value. A write is never re-sent after a timeout or network error, because the registry may already have applied it; it retries only on 429/503. A value that is not a positive, finite number (Infinity included) falls back to the default, so the timeout cannot be turned off.

NPM_RETRY_BACKOFF_MS

500

Base wait before a retry, doubled each time: 500 ms, then 1000 ms by default. When the retried response carries a Retry-After header, that wait (capped at 30 s) is used instead, whatever this is set to. 0, an empty value, or whitespace removes the backoff wait. Any other negative or non-numeric value falls back to the default.

DEBUG

(none)

Logs one line per attempt of every npm API call to stderr, prefixed [npmjs-mcp]: method, URL, then the status and milliseconds to response headers, or the wait before a retry and the attempt number, or the network error. The token is never logged. Enabled only by the exact values npmjs-mcp or *; anything else, such as 1 or npmjs-mcp:*, is ignored. A DEBUG=* set for another tool turns it on too.

NPMJS_MCP_RUNTIME

auto

auto: serve on the oam the launcher is already running under if that is 0.15.2 or newer; otherwise run on the newest oam binary it can find at 0.15.2 or newer (see OAM_BIN); otherwise on Node. An oam host older than 0.15.2 never serves the server itself — it hands off to the newest usable oam, or to Node on PATH, or exits with an error when there is neither. An unusable OAM_BIN is always named on stderr; the other oam binaries found are named, with the reason, only when none of them is usable — an older copy losing to a newer one says nothing. oam: the same, but exit with an error instead of falling back to Node. node: always Node — in-process under npx, and handed off to Node on PATH when a client launches the command with oam run. Case-insensitive; any other value behaves like auto.

NPMJS_MCP_SANDBOX

(none)

1 runs the server in a freshly spawned oam (0.15.2+) under --permission, granting only the npm registry hosts (plus NPM_REGISTRY's host) and the variables the server reads; filesystem and subprocess access stay denied. Forces a spawn even when already running on oam. Under auto, when no usable oam is found, or the one found fails to launch, the server runs without the sandbox and says so on stderr; pair it with NPMJS_MCP_RUNTIME=oam to make that fatal. Ignored under NPMJS_MCP_RUNTIME=node.

OAM_BIN

(none)

Path to an oam binary to use in preference to discovery, when it is 0.15.2 or newer. If it does not exist, is older, or will not run, the launcher says so on stderr and carries on with discovery. Discovery looks in the installed location (%LOCALAPPDATA%\oam\bin then ~/.oam/bin on Windows, ~/.oam/bin elsewhere) and on PATH, asks every oam it finds for its version, and uses the newest; on a tie the installed copy wins. On Windows only oam.exe counts; an oam.cmd / oam.bat shim is never run, and is named on stderr when no usable oam is found. Ignored under NPMJS_MCP_RUNTIME=node, and when already running on oam 0.15.2+ without the sandbox.

Runtime

The server ships a launcher that prefers the oam runtime and falls back to Node. The server itself is a pre-bundled ESM file using only node: builtins, so both paths behave identically — verified against the full MCP surface (handshake, all 64 tools, live registry calls) on each.

oam 0.15.2, the latest release, is the minimum. The launcher asks every oam binary it can find for its version and runs the newest one at or above it, never serves on an older oam, and falls back to Node when there is none (NPMJS_MCP_RUNTIME=oam turns that into a hard error). See Configuration for the details.

Falling back costs nothing: npm has already started Node to run the launcher, so the fallback is an in-process import() — no extra spawn, no extra startup.

oam is faster, but the launcher is not. Measured on windows-arm64, n=12 medians, spawn to first MCP initialize response:

invocation

time

vs node

oam run dist/index.js

116 ms

0.67x

node dist/index.js

172 ms

1.00x

this launcher (node spawns oam)

243 ms

1.41x

npm bin entries are Node scripts, so reaching oam through one costs Node's startup plus oam's — more than oam saves. The launcher exists so npx users get oam automatically; it is not the fast path.

If you want oam's speed, point your MCP host straight at it and skip the launcher:

{ "mcpServers": { "npmjs": { "command": "oam", "args": ["run", "/abs/path/to/dist/index.js"] } } }

Benchmarking note: measure an installed oam (~/.oam/bin), never one out of a cargo target/ directory — a concurrent cargo build replaces the binary mid-run, and fresh bytes are cold where the node.exe you are comparing against is warm. oam is pre-alpha; re-measure on your own hardware.

oam's --permission sandbox is opt-in. Set NPMJS_MCP_SANDBOX=1 and the launcher spawns the server on oam (0.15.2 or newer) with:

  • network granted to registry.npmjs.org, api.npmjs.org and replicate.npmjs.com, plus the hostname of NPM_REGISTRY when it is set;

  • environment granted to exactly the variables the server reads: NPM_TOKEN, NPM_REGISTRY, NPM_REQUEST_TIMEOUT_MS, NPM_RETRY_BACKOFF_MS and DEBUG;

  • filesystem and subprocess access denied outright. The server reads no files at runtime and spawns nothing, so a dependency that suddenly wants either is stopped by the runtime instead of trusted — which matters for a process holding an NPM_TOKEN.

Under the default NPMJS_MCP_RUNTIME=auto, if no usable oam is found, or the one chosen fails to start, the server runs without the sandbox and says so on stderr. Set NPMJS_MCP_RUNTIME=oam as well to make that an error.

It is not the default because an incomplete grant fails silently rather than loudly. Measured on oam 0.9.0 with only registry.npmjs.org granted, npm_health still returned HTTP 200, with weeklyDownloads: null and no error: the download counts come from api.npmjs.org. A missing variable is worse. oam removes a non-granted variable from process.env instead of throwing, so a denied NPM_TOKEN looks like no token at all, "unauthenticated" rather than "denied".

Alternate MCP clients:

Client

Config file

Claude Code

.mcp.json (project root) or ~/.claude.json (global)

Claude Desktop

~/Library/Application Support/Claude/claude_desktop_config.json (macOS)

Cursor

~/.cursor/mcp.json

Windsurf

~/.codeium/windsurf/mcp_config.json

VS Code

.vscode/mcp.json

Use the same JSON block shown above in any of these.

Tools (64)

Search (1)

  • npm_search — Search the npm registry with qualifiers (keywords, author, scope).

Packages (6)

  • npm_package — Metadata: description, dist-tags, maintainers, license, repository.

  • npm_version — Detailed metadata for a specific version.

  • npm_versions — All published versions with dates.

  • npm_readme — README content.

  • npm_dist_tags — Dist-tags (latest, next, beta, etc).

  • npm_types — TypeScript type support (built-in types or @types/*).

Dependencies (3)

  • npm_dependencies — Dependency lists (prod, dev, peer, optional).

  • npm_dep_tree — Transitive dependency tree (configurable depth).

  • npm_license_check — License audit of a package and its direct deps.

Downloads (4)

  • npm_downloads — Total download count for a period.

  • npm_downloads_range — Daily download breakdown.

  • npm_downloads_bulk — Compare downloads for up to 128 packages.

  • npm_version_downloads — Per-version download counts.

Security (3)

  • npm_audit — Check packages for known vulnerabilities.

  • npm_audit_deep — Full audit with CVSS scores, CWEs, fix recommendations.

  • npm_signing_keys — Registry ECDSA signing keys.

Analysis (4)

  • npm_compare — Compare 2–5 packages side-by-side.

  • npm_health — Maintenance, downloads, security, deprecation summary.

  • npm_maintainers — Maintainers and publish history.

  • npm_release_frequency — Release cadence and gaps.

Registry (3)

  • npm_registry_stats — Total npm-wide download counts.

  • npm_recent_changes — Recent publishes from the CouchDB changes feed.

  • npm_ops_playbook — Canonical recipes for npm operations. Call this first when unsure which tool to use.

Provenance & trust (2)

  • npm_provenance — Sigstore attestations (SLSA, publish).

  • npm_trusted_publishers — OIDC trust relationships with CI/CD providers.

Auth (5, requires NPM_TOKEN)

  • npm_whoami — Authenticated user.

  • npm_profile — Profile, email, 2FA status.

  • npm_tokens — List access tokens.

  • npm_verify_token — One-call capability check. Call this first when debugging write failures.

  • npm_user_packages — Packages published by a user.

Access & orgs (7, requires NPM_TOKEN)

  • npm_collaborators — Package collaborators and permissions.

  • npm_package_access — Package access settings.

  • npm_org_members — Org members and roles.

  • npm_org_packages — Org packages.

  • npm_org_teams — Org teams.

  • npm_team_packages — Team package permissions.

  • npm_team_members — Team members and roles.

Workflows (2)

  • npm_check_auth — Auth health check with headless publish feasibility.

  • npm_publish_preflight — Pre-publish validation checklist.

Write operations (19, requires NPM_TOKEN with write scope)

These bypass the CLI/2FA friction that makes npm deprecate and friends fail locally. All use the HTTP API with your NPM_TOKEN.

  • npm_deprecate — Deprecate a package or specific versions (enforces the registry's 1024-char message limit; message punctuation is not constrained).

  • npm_undeprecate — Clear deprecation.

  • npm_unpublish_version — Unpublish a version. Requires confirm: true.

  • npm_unpublish_package — Unpublish an entire package. Requires confirm: true.

  • npm_dist_tag_set — Point a dist-tag at a version.

  • npm_dist_tag_remove — Remove a dist-tag (refuses latest).

  • npm_owner_add — Add a maintainer (resolves user via /-/user/).

  • npm_owner_remove — Remove a maintainer (prevents self-lockout).

  • npm_access_set — Set public/private/restricted access.

  • npm_access_set_mfa — Configure 2FA requirement (none/publish/automation).

  • npm_team_grant / npm_team_revoke — Grant/revoke team permissions on a package.

  • npm_team_create / npm_team_delete — Create/delete a team in an org.

  • npm_team_member_add / npm_team_member_remove — Manage team members.

  • npm_org_member_set / npm_org_member_remove — Manage org membership and roles.

  • npm_token_revoke — Revoke an access token by key.

Webhooks (5, requires NPM_TOKEN)

  • npm_hook_add — Register a webhook on a package, scope, or user.

  • npm_hook_list — List webhooks (optional package filter).

  • npm_hook_get — Fetch a single webhook.

  • npm_hook_update — Update endpoint/secret.

  • npm_hook_remove — Delete a webhook.

Operation decision matrix

Operation

Preferred path

Why

Read (search/view/stats)

These MCP tools, no auth

Fast, zero friction

Deprecate / dist-tag / unpublish

npm_deprecate, npm_dist_tag_*, etc.

HTTP API, no CLI 2FA friction with a 2FA-bypass token

Owner / access / team / org / token changes

npm_owner_*, npm_access_set*, npm_team_*, npm_org_member_*, npm_token_revoke

Since 2026-07-31 these need an interactive 2FA challenge; on 401/403 the error names the npm command a human runs

Publish

bash release.sh X.Y.Z from the workstation

This repo has no CI release workflow (removed in b2c256c). Note: workstation publishes carry no sigstore provenance — --provenance needs CI OIDC.

Unpublish

npm_unpublish_version (with confirm: true)

Safer than CLI; irreversible within 72h

CLI fallback

The npm command named in the error, run by a human who can answer the one-time-password prompt

On a 401/403 from a change that needs interactive 2FA, or a 422 whose message names it

Call npm_ops_playbook at the start of any session to get the up-to-date matrix.

Examples

Audit a dependency

> "What vulnerabilities does lodash 4.17.20 have and what's the fix?"
→ npm_audit_deep({
    name: "my-project",              // the PROJECT being audited, not the dependency
    version: "1.0.0",
    dependencies: { lodash: "4.17.20" }   // required — the set to audit
  })

For a quick check across several packages at once, npm_audit takes the name-to-versions map directly: npm_audit({ packages: { lodash: ["4.17.20"] } }).

Deprecate a package

> "Deprecate @myorg/legacy-sdk with a pointer to @myorg/sdk"
→ npm_deprecate({ name: "@myorg/legacy-sdk", message: "Renamed to @myorg/sdk — install that instead" })

Compare package health

> "Compare fastify vs express vs koa for maintenance health"
→ npm_compare({ packages: ["fastify", "express", "koa"] })
→ npm_health({ name: "fastify" }) // ...etc

Rotate a dist-tag

> "Point @myorg/pkg@latest at 3.2.1"
→ npm_dist_tag_set({ name: "@myorg/pkg", tag: "latest", version: "3.2.1" })

Debug a write failure

> "My deprecate keeps returning 401 — what's wrong?"
→ npm_verify_token()  // Confirms token scope, packages, 2FA state
→ npm_ops_playbook()  // Returns the canonical retry sequence

Troubleshooting

"Error: NPM_TOKEN is required"

  • The tool you called needs auth. Add NPM_TOKEN to the env block of your MCP config and restart the client.

  • Prefer a Granular Access Token scoped to just the packages and orgs you want touched.

"HTTP 401 Unauthorized" or "HTTP 403 Forbidden"

  • Your token lacks scope on the target package. Call npm_verify_token — it reports which packages and orgs the token can actually write.

  • An OTP challenge arrives as a 401 and a 2FA-policy refusal as a 403; neither is ever a 422. For deprecate, undeprecate, dist-tag and unpublish, a Granular Access Token with 2FA bypass enabled fixes both. Classic tokens, including Automation tokens, were revoked in December 2025.

  • Owner, access, team membership and grant, org membership and token changes need an interactive 2FA challenge since 2026-07-31, even from a token with 2FA bypass. No token fixes those: the error names the exact npm command for a human to run and answer the one-time-password prompt.

"HTTP 422 Unprocessable" on a write

  • Read the Raw: body at the end first; it is the registry's actual reason. Before it, the message says what that call sent and the documented npm rules it could have broken, then (where one exists) the npm CLI equivalent, which prints the registry's full error and prompts for a one-time password if needed.

  • For npm_deprecate, a versionRange that matches no published version and a message over 1024 characters are both rejected locally as HTTP 400 before any write, so neither is a 422 cause. The range error lists the published versions; correct the range from that list or with npm_versions.

  • Message punctuation is not a cause. Swapping a trailing period for an em-dash will not clear a 422.

Windows: MCP server doesn't start

  • Use the cmd /c npx ... pattern from the Quick start section. Node 20+ can't spawn .cmd files directly.

Requirements

  • Node.js 20.11+ (package.json declares engines.node: ">=20.11.0")

  • (Optional) npm access token for write operations

Contributing

git clone https://github.com/YawLabs/npmjs-mcp.git
cd npmjs-mcp
npm install
npm run lint       # Biome check
npm run lint:fix   # Auto-fix
npm run build      # tsc + esbuild bundle
npm test           # node --test

See CONTRIBUTING.md for the full workflow, including release process.

License

MIT

Follow @TokenLimitNews on X

Available Tools

64 tools
npm_access_setA
DestructiveIdempotent

Set package access level: 'public' or 'restricted' (private). 'private' is accepted as an alias for 'restricted' for ergonomics -- both map to the registry wire value 'restricted'. Unscoped packages are always public. Restricted access requires a paid npm account.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesPackage name
accessYesAccess level ('private' maps to 'restricted' on the wire)

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds valuable behavioral details beyond the annotations: the 'private' alias maps to 'restricted' on the wire, unscoped packages are always public, and restricted access requires a paid account. These complement the readOnlyHint/destructiveHint annotations without contradicting them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and front-loaded with the primary action. Each sentence adds important context: purpose, alias mapping, scoping constraint, and account requirement. No wasted words or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter tool with no output schema, the description covers the essential context: allowed values, alias behavior, limitations (unscoped packages), and prerequisites (paid account for restricted). It could mention authentication requirements or the impact on existing package visibility, but these are minor gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already describes both parameters with 100% coverage, but the description adds extra meaning: it clarifies the alias behavior of 'private' for the access parameter and explains that name's scoping affects the outcome (unscoped packages are always public). This goes beyond the schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Set package access level' with specific allowed values ('public' or 'restricted'). It distinguishes from siblings like npm_package_access (likely for viewing) and npm_access_set_mfa by focusing on the access level setting action.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use the tool: it works on scoped packages (unscoped are always public) and restricted access requires a paid account. However, it does not explicitly mention alternative tools or state 'when not to use' scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

npm_access_set_mfaA
DestructiveIdempotent

Configure 2FA requirement for publishing: 'none' (off), 'publish' (2FA required), 'automation' (2FA required but automation tokens can bypass).

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesPackage name
levelYesMFA level for publish

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate this is a write operation with destructive potential. The description adds value by explaining the meaning of each level, but it does not disclose consequences such as impact on current users or the need for elevated permissions. It provides adequate but not rich behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that efficiently explains the tool's purpose and all configuration values. No word is wasted, and the clarity remains high.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (2 parameters, no output schema), the description covers the critical semantics of the configuration levels. It lacks explicit statements about post-change effects or prerequisites, but annotations mitigate the destructiveness. Overall, it is sufficient for an agent to invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

While the schema already includes descriptions for both parameters, the description enriches the 'level' enum by clarifying that 'none' means off, 'publish' requires 2FA, and 'automation' allows automation tokens to bypass. This adds practical meaning beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool configures 2FA requirements for publishing and enumerates the three possible levels with brief explanations. This is a specific verb+resource and distinguishes it from other npm tools, though it does not explicitly differentiate from the similar sibling npm_access_set.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives like npm_access_set or how changes affect existing workflows. It only describes the configuration options without contextualizing their appropriate use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

npm_auditA
Read-onlyIdempotent

Quick vulnerability check for specific packages and versions using the bulk advisory API. Returns matching advisories with severity, CVEs, and patched versions. For richer detail (CVSS scores, CWEs, fix recommendations), use npm_audit_deep instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
packagesYesObject mapping package names to arrays of version strings, e.g. {"lodash": ["4.17.20"]}

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the tool as read-only, idempotent, open-world, and non-destructive. The description adds valuable behavioral context by specifying the return payload (severity, CVEs, patched versions) and the nature of the call ('bulk advisory API'), which goes beyond the structured annotations without contradicting them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences deliver purpose, scope, return values, and an alternative tool reference. Every word earns its place; no fluff or repetition. The alternative guidance is front-loaded and the description is perfectly sized for a single-parameter read-only tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has one required parameter, a comprehensive schema, strong annotations, and no output schema. The description covers what the tool does, what it returns, and when to use a different tool. It is complete for the tool's complexity; no further context is necessary.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema description covers 100% of the parameter with a clear example and structure. The description adds no additional parameter semantics beyond what the schema already provides, so the baseline score of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb phrase 'Quick vulnerability check for specific packages and versions' and identifies the resource (npm package advisories via bulk API). It explicitly differentiates from the sibling npm_audit_deep by stating what this tool returns and pointing to the deeper variant for richer detail.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly states when to use this tool: for quick vulnerability checks returning severity, CVEs, and patched versions. It explicitly recommends npm_audit_deep when richer detail is needed, providing an unambiguous alternative and usage boundary.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

npm_audit_deepA
Read-onlyIdempotent

Full security audit on a dependency set — returns detailed advisories with CVSS scores, CWEs, affected version ranges, fix recommendations, and full vulnerability metadata. Uses the npm audit v1 endpoint which provides richer detail than the bulk advisory API (npm_audit). Requires you to provide the dependency map (use npm_dependencies to get it first).

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesProject name
versionNoProject version (default: '1.0.0')
dependenciesYesDependencies to audit as { "package": "version" }, e.g. { "express": "4.17.1" }

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, openWorldHint, idempotentHint, and destructiveHint=false. The description adds value by disclosing the specific endpoint (npm audit v1) and the richer detail level, which are behavioral traits not captured in annotations. No contradiction exists.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the core purpose, then alternative and prerequisite. Every word earns its place; no filler or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description compensates by enumerating return contents (CVSS scores, CWEs, affected version ranges, fix recommendations, full vulnerability metadata). It also covers prerequisite and alternative. Together with strong annotations, it is nearly complete, though it could mention potential latency or auth requirements.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema covers all parameters with descriptions (100% coverage), so the schema does the heavy lifting. The description adds the semantic hint that the dependency map should come from npm_dependencies, but this is a usage note rather than a deeper semantic definition of the parameters themselves.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Full security audit on a dependency set' and explicitly compares itself to npm_audit by noting it uses the npm audit v1 endpoint for 'richer detail'. This clearly differentiates it from the sibling tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It gives an explicit prerequisite: 'use npm_dependencies to get it first' and names the alternative npm_audit, implying when to choose this tool for richer detail. It does not explicitly list when-not-to-use cases, but the comparison and prerequisite provide strong guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

npm_check_authA
Read-onlyIdempotent

Quick auth health check — returns structured data about npm auth status, token capability, and whether headless (CI/agent) publishing is possible. Run this BEFORE attempting any publish operation. Returns canPublishHeadless boolean and a clear recommendation.

MCP servers are called by AI agents which CANNOT open browsers or enter OTP codes. This tool detects that and provides the exact terminal command for the human to run instead of suggesting unworkable retries.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds valuable behavioral context beyond this: it returns a canPublishHeadless boolean and a recommendation, detects headless limitations, and provides the exact terminal command for a human to run. It also explains the MCP server constraint (cannot open browsers), which is critical for agents.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise yet complete: two short paragraphs, first sentence front-loads the purpose, subsequent sentences add necessary behavior and usage context. Every sentence earns its place with no redundancy or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter read-only health check, the description fully covers what it does, when to use it, what it returns (structured data, canPublishHeadless boolean, recommendation, terminal command), and why it exists (AI limitations). This is complete given the absence of an output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, so the schema provides no semantics to add. The description correctly focuses on outputs rather than inputs. The baseline for 0 params is 4, and the description doesn't miss any parameter-related information.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it is a 'Quick auth health check' that returns structured data about npm auth status, token capability, and headless publishing possibility. This specific verb+resource framing distinguishes it from siblings like npm_whoami (identity only) and npm_verify_token (token verification) by focusing on pre-publish headless capability.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly instructs 'Run this BEFORE attempting any publish operation' and explains why (AI cannot open browsers/enter OTP codes, provides terminal command for human). This is clear context, though it doesn't name specific alternative tools for when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

npm_collaboratorsA
Read-onlyIdempotent

Get all users who have access to a package and their permission levels (read-only, read-write). Useful for verifying who can publish to a package before setting up CI/CD.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesPackage name (e.g. 'express' or '@yawlabs/npmjs-mcp')

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true, covering the safety profile. The description adds the behavior of returning permission levels, but does not provide deeper context like auth requirements or pagination. With annotations present, this is adequate but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the primary purpose and followed by a practical use case. Every sentence earns its place with no redundant wording.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the low complexity (single parameter, no output schema) and strong annotations, the description is sufficient. It states what is returned (users and permission levels) and provides a practical scenario. Minor gaps like pagination or response format are not critical for this simple read operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% coverage with a single parameter 'name' and a clear description with examples. The tool description adds no additional parameter semantics beyond what the schema already provides, so the baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: 'Get all users who have access to a package and their permission levels (read-only, read-write).' This uses a specific verb and resource, and distinguishes it from siblings like npm_maintainers or npm_package_access by focusing on collaborators and permission levels.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a clear use case: 'Useful for verifying who can publish to a package before setting up CI/CD.' However, it does not explicitly mention alternatives or when not to use this tool, so it lacks explicit exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

npm_compareA
Read-onlyIdempotent

Compare 2-5 packages side-by-side — downloads, version, license, maintainers, size, last publish, and security status. Great for 'should I use X or Y?' decisions.

ParametersJSON Schema
NameRequiredDescriptionDefault
packagesYesPackage names to compare

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the tool's safe nature is known. The description adds that it returns comparison data across specific metrics, but does not disclose response format, error behavior, or rate limits. It aligns with annotations and adds some context, but no hidden behavioral traits are revealed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the core action and scope. Every phrase adds value, and there is no filler or redundant information beyond the acceptable repetition of the package count.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only comparison tool with one parameter, the description covers purpose, use case, and output content by listing the comparison dimensions. It is complete enough without an output schema, given the tool's simplicity and the strong annotation coverage.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema covers 100% of the parameter with a clear description of the 'packages' array, including min/max bounds. The description reiterates the 2-5 range but adds no additional details about package name formats or invalid input behavior. With high schema coverage, a baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'Compare' with an explicit scope of 2-5 packages and lists the comparison dimensions (downloads, version, license, etc.). This clearly distinguishes it from sibling tools like npm_package or npm_search, which focus on single packages or searching.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly states it is 'Great for should I use X or Y? decisions,' which conveys a primary use case. It does not name alternative tools or when not to use it, but the side-by-side framing implicitly differentiates it from single-package tools. This is clear enough without explicit exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

npm_dependenciesA
Read-onlyIdempotent

Get the dependency lists for a specific package version — production deps, devDeps, peerDeps, and optionalDeps.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesPackage name
versionNoSemver version or dist-tag (default: 'latest')

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, and openWorldHint=true, so the agent knows this is a safe read operation. The description adds useful context about the specific dependency categories returned, but does not disclose any additional behavioral traits such as pagination, rate limits, or error handling. This aligns with the baseline for descriptions that benefit from strong annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that immediately states the core action and then enumerates the dependency categories. Every word contributes value, and there is no redundancy or extraneous detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

This is a simple read-only tool with 2 parameters, no output schema, and no nested objects. The description adequately conveys the purpose and return type (dependency lists). While it does not detail the exact response structure, the simplicity of the tool and the strong annotations make the description sufficiently complete for an agent to select and invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% with clear parameter descriptions: 'name' (Package name) and 'version' (Semver version or dist-tag, default 'latest'). The description does not add further meaning beyond the schema, but it does reinforce that the tool operates on a specific version, which is consistent with the parameters. Baseline 3 is appropriate since the schema handles parameter documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Get') and the resource ('dependency lists for a specific package version'), explicitly enumerating the dependency types (production deps, devDeps, peerDeps, optionalDeps). This distinguishes it from sibling tools like npm_dep_tree or npm_package, which likely serve different purposes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives such as npm_dep_tree or npm_package. There is no mention of exclusions, prerequisites, or situations where another tool would be more appropriate. The intended use is only implied by the tool's purpose.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

npm_deprecateA
DestructiveIdempotent

Deprecate a package or specific versions. Shows a warning message on install. Uses the HTTP API with NPM_TOKEN, so no CLI login or OTP prompt is involved; a token without 2FA bypass is refused with 401 or 403. Registry hard limit: deprecation messages must be <= 1024 characters. A message over the limit, or a versionRange matching no published version, is rejected locally as HTTP 400 before any write; a 422 from the registry describes the packument that was sent. Message punctuation is never checked.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesPackage name (e.g. '@yawlabs/spend')
messageYesDeprecation message. Use npm_undeprecate to clear.
versionRangeNoSemver range. Omit to deprecate ALL versions. Example: '<1.0.0' or '0.3.x'. Standard semver applies — bare integers are x-ranges (e.g. '0' means '0.x.x', not exact version 0). For a single version use '=1.2.3'.

TDQS

A4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Even with annotations already marking destructive and idempotent behavior, the description adds a lot: token authentication with 401/403 on missing 2FA bypass, a 1024-character registry limit, local HTTP 400 before any write when the message is too long or versionRange matches nothing, and 422 from the registry describing the sent packument. This is instructive and consistent with the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the core action and effect. The rest adds behavioral and error-manager detail that mostly earns its place; 'Message punctuation is never checked' is mildly odd but acceptable as an edge-case disclosure. No real bloat.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given a write operation with no output schema, the description covers the essential elements: auth mechanism, side effect, hard limits, pre-write validation, and error statuses. An agent can successfully invoke the tool and understand common failure modes without needing additional documentation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3; the schema already explains name, message, versionRange semantics ('Omit to deprecate ALL versions', 'Use npm_undeprecate to clear', x-range semantics). The description only adds message-length/error semantics indirectly, not a substantive semantic expansion of the parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence 'Deprecate a package or specific versions' gives a specific verb and resource, and adds the effect 'Shows a warning message on install'. It does not explicitly name or contrast with sibling tools like npm_undeprecate, so it is clear but not top-tier on sibling differentiation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies a usage path by saying 'Uses the HTTP API with NPM_TOKEN, so no CLI login or OTP prompt is involved', which hints at when to choose this approach. However, there is no explicit when-to-use versus when-not-to-use guidance and no named alternatives in the description itself.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

npm_dep_treeA
Read-onlyIdempotent

Resolve the production dependency tree for a package version (up to a configurable depth). Shows the full transitive dependency graph with versions. Issues one registry request per discovered package (10 in flight), so a wide tree at depth 4-5 can take a while; the walk is capped at 60s and returns truncated: true with a warning if it runs out of budget.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesPackage name
depthNoMax tree depth where the root counts as level 1 (default 3 = root + 2 transitive levels, max 5)
versionNoSemver version or dist-tag (default: 'latest')

TDQS

A4.3/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes well beyond the readOnly/idempotent annotations by disclosing rate-limit behavior ('10 in flight'), performance expectations ('wide tree at depth 4-5 can take a while'), a hard time cap ('60s'), and the truncated result flag with warning. This is exactly the kind of behavioral detail an agent needs to anticipate long-running or incomplete calls.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences deliver the core purpose and a critical performance caveat in a compact, front-loaded manner. Every clause earns its place: what the tool does, how it behaves, and what to expect on timeout. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the absence of an output schema, the description still explains the main return signal ('truncated: true') and warns about timeouts. It covers the essential operational context (registry requests, concurrency, depth limits) so an agent can decide whether to invoke it and how to set depth. No critical missing context for calling this tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already documents all three parameters comprehensively (name, depth, version), achieving 100% coverage. The description adds minimal new parameter meaning beyond the schema, only reiterating depth as configurable and mentioning the root-counting convention that is already in the schema. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb ('Resolve') and the exact resource ('production dependency tree for a package version'), and explicitly mentions the output ('full transitive dependency graph with versions'). It distinguishes itself from many sibling npm tools by focusing on the recursive tree structure rather than a single package or metadata lookup.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use it (when a transitive dependency tree is needed) but does not explicitly state when not to use it or which sibling tool is an alternative (e.g., npm_dependencies for a flat list). It gives context about depth limits and performance trade-offs, but no explicit exclusion guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

npm_dist_tag_removeA
DestructiveIdempotent

Remove a dist-tag from a package. The 'latest' tag cannot be removed, only reassigned.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagYesDist-tag name to remove
nameYesPackage name

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate write/destructive characteristics, and the description adds a valuable behavioral nuance about the 'latest' tag restriction. It also implies idempotency by not mentioning any error conditions, consistent with the idempotentHint. The description complements rather than repeats the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences, front-loaded with the core action and followed by a key constraint. Every word earns its place; there is no redundancy or irrelevant detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter tool with no output schema, the description provides sufficient context. The destructive nature is declared via annotations, and the 'latest' exception is highlighted. It could mention expected result or reversibility, but given the annotations cover the safety profile, the description is reasonably complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% for both parameters (tag and name), so the description doesn't need to add parameter details. It adds minimal extra meaning beyond the schema, which is acceptable given the schema already fully describes the parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Remove a dist-tag from a package') with a specific verb and resource. It also distinguishes this from related tools like npm_dist_tag_set by indicating it is the removal counterpart, and the note about 'latest' adds unambiguous scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly defines when to use the tool (when you want to delete a dist-tag) and includes an important exclusion (the 'latest' tag cannot be removed, only reassigned). It doesn't explicitly name alternative tools like npm_dist_tag_set, but the context is clear enough for an agent to infer appropriate usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

npm_dist_tagsA
Read-onlyIdempotent

Get dist-tags for a package (latest, next, beta, etc).

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesPackage name

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds examples of dist-tags but does not disclose return format, error behavior, or any rate limits. It does not contradict annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence that front-loads the action (Get dist-tags) and adds clarifying examples. No unnecessary words or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only tool with one parameter, the description is mostly complete. It does not explicitly describe the return format (e.g., a map of tag to version), but the examples of tags make the expected output reasonably clear. Minor gap given no output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with the parameter 'name' described as 'Package name'. The description only repeats 'package' without adding format or constraints, so it does not exceed the baseline provided by the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Get') with a clear resource ('dist-tags for a package') and provides illustrative examples ('latest, next, beta, etc.'). It clearly distinguishes from write siblings like npm_dist_tag_set and npm_dist_tag_remove.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is for retrieving dist-tags but does not explicitly state when to use it over alternatives such as npm_versions or npm_package. It lacks any when-to-use or when-not-to-use guidance, though the purpose itself is clear enough for basic selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

npm_dist_tag_setA
DestructiveIdempotent

Point a dist-tag (e.g. 'latest', 'beta', 'next') at a specific version. Common uses: promote a beta to latest, roll back latest to a prior version, maintain separate channels.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagYesDist-tag name (e.g. 'latest', 'beta', 'next')
nameYesPackage name
versionYesVersion the tag should point to

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already disclose that this is a write operation (readOnlyHint=false), destructive (destructiveHint=true), and idempotent (idempotentHint=true). The description adds common use cases but does not disclose additional behavioral traits such as permission requirements or the fact that the previous tag association is overwritten. This is adequate but not rich, given the annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the action, and every sentence adds value. It avoids filler and is highly efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple three-parameter tool with no output schema, the description is complete enough. It covers the purpose, use cases, and examples, while annotations and schema handle the safety and parameter details. A slight gap is the lack of mention of overwriting behavior, but that is not critical for a tool of this simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% for all three parameters (tag, name, version), so the descriptions already carry the semantic burden. The tool description provides some extra flavor with tag examples ('latest', 'beta', 'next') but adds no substantive information beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's action: 'Point a dist-tag ... at a specific version.' It uses a specific verb ('point') and identifies the resource and target, with examples ('latest', 'beta', 'next') that distinguish it from sibling tools like npm_dist_tags (list) and npm_dist_tag_remove.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use the tool via 'Common uses: promote a beta to latest, roll back latest to a prior version, maintain separate channels.' However, it does not explicitly name alternatives or state when not to use it, so it falls short of the highest score.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

npm_downloadsA
Read-onlyIdempotent

Get 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).

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesPackage name
periodNoPeriod: 'last-day', 'last-week', 'last-month', 'last-year', or 'YYYY-MM-DD:YYYY-MM-DD' (default: 'last-week')

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, establishing a safe read operation. The description adds value by specifying the accepted period formats including custom date ranges, which is behavioral context beyond the annotations. It does not describe error handling or response structure, but the annotations lower the bar.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured sentence that front-loads the primary action and then provides the period options in parentheses. Every word is informative with no redundancy or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple with two parameters and strong annotations, so the description covers the essential purpose and period options. It does not state the return format, but 'total download count' reasonably implies a numeric result. The lack of a return format description is a minor gap in an otherwise complete description for this tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents the 'name' and 'period' parameters fully. The description repeats the period value examples but does not add new meaning beyond the schema. It reinforces that the result is a total count, but that is purpose, not parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose with a specific verb ('Get'), resource ('total download count for a package'), and scope ('over a period'). It also enumerates acceptable period values, which helps distinguish it from siblings like npm_downloads_bulk (multiple packages) and npm_version_downloads (version-specific counts).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for single-package download statistics by saying 'for a package', but it does not explicitly state when to use this tool over siblings such as npm_downloads_range or npm_downloads_bulk. No alternatives or exclusions are mentioned, so the guidance is implied rather than explicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

npm_downloads_bulkA
Read-onlyIdempotent

Compare download counts for multiple packages over a period. Up to 128 packages. Scoped packages (@scope/name) are NOT supported by the bulk endpoint — call npm_downloads separately for each scoped package.

ParametersJSON Schema
NameRequiredDescriptionDefault
periodNoPeriod (default: 'last-week')
packagesYesArray of package names to compare (unscoped only)

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, destructiveHint=false. The description adds operational constraints: 128 package limit, scoped packages unsupported, and the bulk endpoint nature. These are valuable behavioral details beyond annotations, though return format and pagination are not covered.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with purpose, then critical constraints. No filler or repetition of schema details.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a read-only bulk query tool with full schema coverage and safety annotations, the description covers the key use case, constraints (128 max, no scoped packages), and points to an alternative for unsupported packages. It does not describe the exact output shape, but no output schema exists and the task is simple enough that this is minor.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%: packages and period are already described ('Array of package names to compare (unscoped only)' and 'Period (default: last-week)'). The description adds no new parameter-level meaning beyond reinforcing the unscoped constraint and the bulk limit, which already appears in schema maxItems. Baseline 3 applies when schema covers parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description opens with a specific verb 'Compare' and resource 'download counts for multiple packages over a period', clearly distinguishing it from single-package siblings like npm_downloads. The explicit 128-package limit and scoped-package exclusion further clarify scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states that scoped packages are not supported and instructs to call npm_downloads separately per scoped package, providing a clear when-not and alternative. However, it does not explicitly contrast with using npm_downloads for single unscoped packages, though the bulk purpose is evident.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

npm_downloads_rangeA
Read-onlyIdempotent

Get daily download counts for a package over a period. Returns per-day breakdown.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesPackage name
periodNoPeriod: 'last-week', 'last-month', 'last-year', or 'YYYY-MM-DD:YYYY-MM-DD' (default: 'last-month')

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds that it returns a per-day breakdown, which is useful behavioral context beyond annotations, but it does not disclose rate limits, authentication needs, or edge cases like invalid period formats.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that concisely states the core action and outcome. It contains no redundant information or filler, making it highly efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only tool with two well-documented parameters, the description plus schema is largely adequate. It states the return format (per-day breakdown) and scope (over a period), but it does not explicitly differentiate from closely related sibling tools, which is a minor completeness gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with both 'name' and 'period' fully described in the schema. The tool description adds no additional parameter semantics; the schema already provides default and allowed formats for 'period'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool gets daily download counts for a package over a period, with a per-day breakdown. This specific verb+resource combination distinguishes it from sibling tools like npm_downloads or npm_downloads_bulk by emphasizing daily granularity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives such as npm_downloads or npm_version_downloads. It does not mention any exclusions, comparisons, or selection criteria, leaving the agent to infer usage solely from the name.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

npm_healthA
Read-onlyIdempotent

Assess the health of a package — maintenance activity, download trend, security status, deprecation, and documentation quality.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesPackage name

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the tool as read-only, idempotent, and non-destructive. The description adds meaningful behavioral context by detailing the data sources evaluated (e.g., security status, deprecation, documentation quality), which goes beyond the annotation's safety profile and helps the agent anticipate the kind of information the tool gathers.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that starts with the action verb and succinctly lists the key health dimensions. No redundant filler or repetition exists, achieving excellent conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple (1 parameter, full schema coverage) and annotations cover safety. The description explains what it assesses across multiple dimensions. A minor gap is the lack of any mention of the output format (e.g., score or report), but this is not critical given the tool's straightforward nature and absence of an output schema.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single parameter 'name' is fully described in the schema as 'Package name' (100% coverage). The tool description does not add further semantic information about the parameter, so it remains at the baseline 3; the schema carries the entire descriptive burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Assess') and clearly identifies the resource ('health of a package'). It enumerates concrete dimensions (maintenance activity, download trend, security status, deprecation, documentation quality) that distinguish this holistic health check from sibling tools like npm_audit or npm_downloads, which focus on single aspects.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description establishes a clear usage context: the tool provides an overall health assessment. It does not explicitly mention alternatives or exclusion criteria, but the scope is evident from the listed dimensions. This meets the 'clear context, no exclusions' level.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

npm_hook_addA

Create a registry webhook. Target is 'pkg' or '@scope/pkg' for a package, '@scope' for a scope, or '~user' for a user's packages. Endpoint is the HTTPS URL to POST events to; secret is used to HMAC-sign payloads. The secret is never echoed back in tool responses.

ParametersJSON Schema
NameRequiredDescriptionDefault
secretYesSecret used to HMAC-sign webhook payloads
targetYesHook target: 'pkg', '@scope/pkg', '@scope', or '~user'
endpointYesHTTPS URL that will receive POST events

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate non-readonly and non-idempotent behavior. The description adds meaningful transparency by stating that the secret is never echoed back in responses, which is not present in the annotations or schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three concise sentences with no redundancy. The main action is front-loaded, followed by precise parameter guidance and a key behavioral caveat. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description fully explains all three required input parameters, which is the core need. However, there is no output schema or description of what the tool returns on success/failure, leaving the agent unsure about the expected response shape beyond the secret not being echoed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so parameters are already well documented. The description reinforces target formats and endpoint/secret roles but adds little beyond what the schema provides, aside from the 'never echoed' note which is more behavioral.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb ('Create') and resource ('registry webhook'), and elaborates the exact target formats. It clearly distinguishes this creation operation from the sibling hook tools (list/get/update/remove) by the action itself.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when to use it—creating a webhook—and precisely defines the target argument formats. It does not explicitly state when not to use it (e.g., for updating an existing hook) or name alternatives, but the creating action is unambiguous.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

npm_hook_getA
Read-onlyIdempotent

Get a single webhook by its ID. The stored secret is redacted from the response.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesHook ID (UUID from npm_hook_list)

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, but the description adds a valuable behavioral detail: 'The stored secret is redacted from the response.' This sets expectations beyond the structured metadata.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences, no unnecessary words. The first sentence states the action, and the second provides a key behavioral note. It is appropriately front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With one simple parameter, strong annotations, and a clear description of the action and redaction behavior, the description is complete for this low-complexity tool. The lack of an output schema is mitigated by the note about the returned secret.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% coverage for the single parameter 'id', with a clear description 'Hook ID (UUID from npm_hook_list)'. The tool description itself adds no extra parameter semantics, so baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb 'Get' with a resource 'webhook' and scope 'by its ID'. It clearly distinguishes from sibling tools like npm_hook_list (which lists all webhooks) and mutation tools such as npm_hook_add/update/remove.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when you have a webhook ID but does not explicitly state when to use this tool over alternatives. No exclusions or alternative tool names are provided; the guidance is only implicit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

npm_hook_listA
Read-onlyIdempotent

List webhooks. Optionally filter by package name. Secrets are redacted from responses.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMax results
offsetNoPagination offset
packageNoFilter by package name

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint=true, destructiveHint=false, and idempotentHint=true, so the safety profile is clear. The description adds valuable context by stating that 'Secrets are redacted from responses,' which is a non-obvious behavioral detail that helps the agent set expectations. It also clarifies the optional package filter.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise, with two short sentences that front-load the core purpose, then the optional filter, then the key behavioral note about redaction. No unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list operation with strong annotations and no output schema, the description covers the essential purpose, filtering capability, and an important output detail (secret redaction). It is complete enough for an agent to select and invoke the tool correctly, though it does not describe pagination behavior explicitly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% for all three parameters (limit, offset, package), so the schema is sufficient. The description reinforces the package filter but does not add extra semantics beyond the schema. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's action ('List webhooks') and resource (webhooks), with a specific optional filter by package name. This distinguishes it from sibling hook tools like npm_hook_get, npm_hook_add, npm_hook_update, and npm_hook_remove, which have different actions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for listing webhooks and mentions an optional filter, but it does not explicitly contrast with alternatives like npm_hook_get for retrieving a single hook. The usage context is clear, but there are no explicit exclusions or 'when not to use' guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

npm_hook_removeA
DestructiveIdempotent

Delete a webhook by ID.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesHook ID

TDQS

A3.6/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds no behavioral context beyond the annotations. The destructiveHint: true, idempotentHint: true, and readOnlyHint: false already convey the safety profile, and 'Delete a webhook' merely restates that. There is no mention of permanence, ownership requirements, or error handling, so the description fails to add incremental value.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, compact sentence: 'Delete a webhook by ID.' It is front-loaded with the action and resource, contains zero filler, and is appropriately sized for the tool's simplicity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (one required parameter, no nested objects, no output schema), the description covers the core action, and annotations supply crucial context about destructive and idempotent behavior. It lacks an explicit statement about return values or permanent effects, but these are not critical for this type of operation, making it nearly complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already documents the single 'id' parameter with a description 'Hook ID', and the description's phrase 'by ID' aligns with that. With 100% schema description coverage, the description does not need to compensate, and it adds no extra meaning beyond what the schema provides, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Delete') and the resource ('a webhook') with a required identifier ('by ID'). It is unambiguously distinct from sibling hook tools like npm_hook_add, npm_hook_get, and npm_hook_update, which perform different operations on the same resource.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies use when a webhook needs to be removed, but it does not explicitly provide context for when to use this tool versus alternatives like npm_hook_update (modifying) or npm_hook_get (reading). There are no exclusions, prerequisites, or situational guidance, so it earns a mid-range score.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

npm_hook_updateA
DestructiveIdempotent

Replace a webhook's endpoint AND signing secret. Both are required: the registry PUT overwrites the hook config, so this call always rotates the secret to whatever you pass — supply the current secret if you only mean to change the endpoint. The returned hook object has the secret redacted.

ParametersJSON Schema
NameRequiredDescriptionDefault
idYesHook ID
secretYesSigning secret to store. Always written; pass the existing secret to leave it effectively unchanged.
endpointYesHTTPS URL for the hook (required — the PUT replaces the whole config)

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate destructiveHint=true, but the description goes beyond by explaining the PUT overwrite semantics: the config is completely replaced, so both fields are always written. It also discloses that the returned hook object redacts the secret, which is useful behavioral context not present in annotations. This adds meaningful transparency without contradicting annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, but both are information-dense and critical. The first sentence states the core behavior and the overwrite warning, and the second clarifies the secret rotation nuance and the redaction detail. No fluff, every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 3-parameter mutation tool with no output schema, the description covers the essential behavior, the overwrite pitfall, and the return redaction. It doesn't mention error cases or auth requirements, but annotations and sibling context (other hook tools) imply standard conditions. Given the simplicity and complete schema coverage, this is sufficiently complete for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents each parameter meaning. The description adds the crucial nuance that secret is always written and that endpoint is required, but these are also reflected in schema descriptions ('Always written; pass the existing secret...' and 'required — the PUT replaces the whole config'). The description doesn't add significant new parameter semantics beyond what schema provides, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's action: replace a webhook's endpoint AND signing secret. It explicitly distinguishes this from merely changing one or the other, and the warning about the overwrite behavior clarifies the tool's unique destructive scope, setting it apart from sibling tools like npm_hook_add or npm_hook_get.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit usage guidance: both endpoint and secret are required, and it warns that passing only the endpoint will rotate the secret unintentionally. It tells the user to supply the current secret if they only intend to change the endpoint, which is a clear conditional instruction. While it doesn't name alternatives explicitly, the guidance is sufficient for correct invocation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

npm_license_checkA
Read-onlyIdempotent

Check the license of a package and its direct production dependencies. Flags missing or non-standard licenses. Matches single SPDX license identifiers case-insensitively (so 'mit' and 'MIT' both match). SPDX expressions like '(MIT OR Apache-2.0)' are NOT decomposed — they are flagged unless added to allowed verbatim. Issues 2 requests per direct dependency (10 in flight), capped at 60s; deps not reached in time come back as NOT_CHECKED (and are flagged, never treated as allowed).

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesPackage name
allowedNoSPDX license identifiers to treat as allowed (default: MIT, ISC, BSD-2-Clause, BSD-3-Clause, Apache-2.0, 0BSD, Unlicense)
versionNoSemver version or dist-tag (default: 'latest')

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses significant behavioral details beyond the annotations: it issues 2 requests per direct dependency (10 in flight), has a 60s cap, returns 'NOT_CHECKED' for unreached deps, and flags those as not allowed. It also explains that SPDX expressions are not decomposed and must be added verbatim to 'allowed'. These details are critical for understanding tool performance and output interpretation, and they fully align with the read-only/idempotent annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but every sentence earns its place: it leads with the core purpose, then explains the matching semantics, then the network constraints and failure mode. There is no fluff or repetition; the length is justified by the informational density needed for this tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (network requests, timeouts, concurrency, special handling of SPDX expressions), the description covers the key operational aspects and even hints at output via the 'NOT_CHECKED' status. However, it does not describe the full return structure (e.g., whether results are a list, map, or report) since there is no output schema. This is a minor gap for an agent needing to interpret the result, but the description provides enough to anticipate common cases.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already documents all three parameters with 100% coverage, so the baseline is 3. The description adds value by explaining how the 'allowed' parameter behaves (exact verbatim matching, default list, case-insensitive matching), which is not fully evident from the schema alone. It also clarifies the 'version' default implicitly by not contradicting it, though no extra syntax guidance is given for name/version.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's action: 'Check the license of a package and its direct production dependencies. Flags missing or non-standard licenses.' It also specifies the scope (direct production dependencies) and the matching behavior, distinguishing it from other npm tools that inspect dependencies or audit security. The details about SPDX expression handling further clarify the exact resource and operation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is for license compliance checking but does not explicitly state when to use it over siblings like npm_audit, npm_dependencies, or npm_dep_tree. No alternatives are mentioned, so an agent must infer the use case from the name and description. There is clear context but no exclusions or routing guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

npm_maintainersA
Read-onlyIdempotent

Get current maintainers and their publish history for a package.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesPackage name

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare the tool as readOnly, idempotent, and non-destructive. The description adds behavioral scope by specifying 'current maintainers' and 'publish history', clarifying exactly what data is returned. It does not disclose pagination or auth details, but these are minor given the simple read-only nature.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured sentence with no filler. It front-loads the action and resource, making it immediately clear what the tool does.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter read tool with strong annotations, the description sufficiently states the outputs (maintainers and publish history). No output schema exists, but the description covers expected content. It is contextually complete within the sibling tool ecosystem.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already provides 100% coverage for the single parameter 'name' with description 'Package name'. The description does not add extra parameter-level details, but does reinforce the package context by mentioning 'for a package'. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Get' and the resource 'current maintainers and their publish history' for a package. It distinguishes from mutating sibling tools like npm_owner_add/remove by focusing on retrieval. The resource is specific and non-tautological.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Usage context is implied (when you need maintainer info for a package), but the description provides no explicit guidance on when to use this tool versus alternatives, nor any exclusions. It does not mention that the package 'name' parameter is required, which is already in the schema.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

npm_ops_playbookA
Read-onlyIdempotent

Return canonical recipes for common npm operations — which MCP tool to call for which op, CLI fallbacks when the MCP server can't handle something, and message format guidance. Call this FIRST when you're not sure how to do an npm operation. Prevents reinventing approaches that don't work.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds meaningful context about what the tool returns (recipes, tool mappings, CLI fallbacks, message formats) and its purpose to prevent reinventing approaches. This goes beyond the annotations without contradicting them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences, each earning its place: what it returns, when to call it first, and why it exists. It is front-loaded with the core purpose and avoids any filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter meta-tool with no output schema, the description is complete: it covers the tool's function, usage timing, and content of the guidance. Given the simplicity, nothing important is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are no parameters, and schema coverage is 100% (the schema is empty). With zero params, a baseline of 4 is appropriate; the description adds no parameter details but none are needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Return canonical recipes for common npm operations' — which MCP tool to call, CLI fallbacks, and message format guidance. This distinguishes it from sibling tools by positioning it as the meta-tool that guides selection among them.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly tells the agent when to use it: 'Call this FIRST when you're not sure how to do an npm operation.' It also clarifies how it supplements alternatives by providing CLI fallbacks when the MCP server can't handle something. This is strong usage guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

npm_org_member_removeA
DestructiveIdempotent

Remove a user from an org. Their team memberships in that org are also removed. Requires confirm: true — team memberships cascade and cannot be selectively preserved.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgYesOrganization name
userYesnpm username
confirmYesMust be literally true. Guards against accidental member removal.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes beyond the annotations by disclosing the specific side effect (team memberships are also removed) and the confirm guard requirement. This adds critical behavioral context about what gets destroyed, which is valuable for a destructive operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two tight sentences, front-loaded with the action, followed by the critical side effect and requirement. Every sentence earns its place with no fluff or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive tool with no output schema, the description is complete: it states the action, the side effect, the confirm guard, and the irreversible cascade. It gives enough context to use the tool safely and correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with each parameter already described clearly (org, user, confirm). The description adds rationale for the confirm parameter but does not introduce new semantic meaning for the org and user parameters beyond what the schema provides.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb and resource context: 'Remove a user from an org' and clearly distinguishes it from team-level tools by noting 'Their team memberships in that org are also removed.' This differentiates it from siblings like npm_team_member_remove and npm_org_member_set.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides clear context for when to use it (removing a user from an org entirely) and warns about the cascading effect with 'team memberships cascade and cannot be selectively preserved.' It doesn't explicitly name alternatives or when-not-to-use, but the context is sufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

npm_org_membersA
Read-onlyIdempotent

List all members of an npm organization with their roles (owner, admin, developer). Requires authentication as an org member.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgYesOrganization name (without @ prefix)

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safe, read-only, idempotent nature of the tool. The description adds the authentication requirement and that roles are included in the output, but no details on pagination, error cases, or response structure. It provides moderate additional context beyond the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, concise sentence that front-loads the action and resource, and includes essential context (authentication requirement) without redundancy. It is well-structured and efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only tool with one parameter and comprehensive annotations, the description adequately covers purpose and auth. It could include more about response format or exclusions, but given the tool's simplicity and annotation coverage, it is largely complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% description coverage for the sole parameter 'org', including the note about '@' prefix. The tool description does not add further parameter semantics, so the schema carries the full burden, resulting in a baseline score of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific action ('List all members') with a specific resource ('npm organization') and includes expected output ('roles owner, admin, developer'). It distinguishes itself from sibling tools like npm_team_members or npm_maintainers by explicitly focusing on org members.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage by stating the purpose and an authentication prerequisite, but it does not explicitly compare to alternatives (e.g., 'Use npm_team_members for team-level membership'). There is no when-to-use or when-not-to-use guidance beyond the clear purpose.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

npm_org_member_setA
DestructiveIdempotent

Add a user to an org or change their role. Roles: 'developer', 'admin', 'owner'. If the user is already in the org, updates the role. Omitting role keeps the member's current role: this tool reads the roster first and re-sends the existing role explicitly, because the registry DEFAULTS an omitted role to 'developer' rather than preserving it (which would silently demote an admin or owner). For a user who is not yet a member, omitting role adds them as 'developer'.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgYesOrganization name (with or without leading @)
roleNoRole to assign
userYesnpm username
confirmYesMust be literally true. Guards against accidental org membership changes.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes far beyond the annotations (destructiveHint, idempotentHint) by disclosing the critical behavior: the registry defaults an omitted role to 'developer', which would silently demote admins/owners. It explains the workaround of reading the roster first and re-sending the existing role. It also notes that omitting role for new users adds them as 'developer'. This is essential behavioral context that annotations do not provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is somewhat long but every sentence is information-dense. The primary purpose is front-loaded, and the crucial nuance about role omission is explained in a structured flow. No filler or redundant phrasing; the length is justified by the complexity of the behavior.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive org membership mutation with no output schema, the description covers all necessary aspects: adding vs updating, role omission behavior, the registry's surprising default, and the safety requirement. The confirm parameter is also described in the schema, and the description emphasizes the guard. An agent has enough to invoke this tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, so baseline is 3. The description adds meaningful semantic detail about the 'role' parameter: the effect of omitting it differs for existing vs new members, and the tool explicitly preserves existing roles. This extra explanation helps the agent pass the correct parameters, exceeding what the schema alone conveys.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Add a user to an org or change their role.' It clearly names the action and scope, and differentiates itself from siblings like npm_org_member_remove and npm_owner_add. No ambiguity about what this tool does.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear context for when to use the tool: to add a member or update a role. It explains behavior for both existing and new members, which helps the agent decide based on the scenario. However, it does not explicitly name alternatives or state when-not-to-use, leaving some inference to the agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

npm_org_packagesA
Read-onlyIdempotent

List all packages accessible to an npm organization with their access levels. Shows what the org owns or has been granted access to.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgYesOrganization name (without @ prefix)

TDQS

A4.1/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already establish this as read-only, idempotent, and non-destructive. The description adds meaningful context by revealing that the result includes access levels and clarifies that 'accessible' covers packages the org owns or has been granted. It does not mention authentication or pagination, but those are not essential given the read-only safety profile.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences with the core action front-loaded ('List all packages...'). Every word adds value, and there is no redundant or boilerplate content.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter, read-only listing tool, the description is sufficient: it states the scope ('all packages accessible'), the distinguishing output detail ('access levels'), and the ownership/grant nuance. The rich annotations and simple schema mean no further context is needed for an agent to select and invoke this correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema fully describes the single required parameter `org` with the note 'Organization name (without @ prefix)' at 100% coverage. The description does not add additional parameter-level details, so the baseline score of 3 is appropriate because the schema carries the semantic burden.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('List') and identifies the exact resource ('all packages accessible to an npm organization') plus includes the distinguishing detail of access levels. It clearly separates this from sibling tools like npm_user_packages and npm_team_packages by anchoring on the organization scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage: use this when you want to see an organization's accessible packages and their access levels. However, it does not explicitly mention when not to use it or point to alternatives such as npm_user_packages for user-scoped listings or npm_team_packages for team-scoped listings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

npm_org_teamsA
Read-onlyIdempotent

List all teams within an npm organization. Requires authentication as an org member.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgYesOrganization name (without @ prefix)

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds a key behavioral requirement—authentication as an org member—which is not in the annotations. This is useful context that goes beyond the structured data.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences. It front-loads the primary action ('List all teams...') and includes only essential extra information (auth requirement). No fluff or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (1 parameter, clear purpose) and strong annotations (read-only, non-destructive), the description is mostly complete. It could mention pagination or response format, especially since there is no output schema, but for a straightforward list operation it is adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already provides full coverage with a description for the only parameter 'org' ('Organization name (without @ prefix)'). The tool description adds no additional parameter information. With schema coverage at 100%, the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states a specific action and resource: 'List all teams within an npm organization.' This distinguishes it from sibling tools like npm_org_members (list members) and npm_team_members (list members of a team), making its purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context for when to use this tool: to list teams in an npm org. It also mentions a prerequisite ('Requires authentication as an org member'), which helps the agent understand preconditions. However, it does not explicitly mention alternative tools or exclusions, so it stops short of full guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

npm_owner_addA
Idempotent

Add a user as a maintainer of a package. They will have publish and write permissions. Resolves the user's email via /-/user/ (no need to supply it). Use npm_collaborators to verify before adding.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesPackage name
usernameYesnpm username to add as maintainer

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate non-read-only, non-destructive, idempotent. The description adds valuable behavioral details: grants publish/write permissions and resolves email automatically via /-/user/. This goes beyond the schema and annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences with no filler. The action, permissions, email resolution, and verification step are all front-loaded and every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given a simple 2-parameter mutating tool with no output schema, the description covers the essential behavior, permissions, and a pre-add verification step. It could mention reversibility or side effects, but the core context is sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has 100% coverage with descriptions for both parameters (name, username). The description doesn't add much beyond noting that email is resolved automatically, which is implicit in 'username'. Baseline 3 is appropriate since the schema already documents parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('Add a user as a maintainer of a package') with clear resource and scope, distinguishing it from siblings like npm_owner_remove. The mention of publish/write permissions adds specificity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear context by recommending npm_collaborators for verification before adding, which implies when to use this tool (after checking current maintainers). It doesn't explicitly state when not to use it, but the verification guidance is actionable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

npm_owner_removeA
DestructiveIdempotent

Remove a user from a package's maintainer list. Refuses if it would leave the package with zero maintainers (lockout prevention).

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesPackage name
usernameYesnpm username to remove

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare destructiveHint=true, idempotentHint=true, and readOnlyHint=false. The description adds a valuable behavioral detail: 'Refuses if it would leave the package with zero maintainers (lockout prevention),' which goes beyond the annotation metadata. This provides the agent with a clear safety guardrail.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the verb and resource, and includes a useful safety note without any fluff. Every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter tool with strong annotations, the description covers the core action, the safety behavior, and the scope. It does not describe return values or permissions, but those are not essential given the annotations. The lockout note adds completeness, though explicit when-to-use guidance would make it fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema covers 100% of the parameters with descriptions ('Package name' and 'npm username to remove'). The tool description adds no extra parameter semantics, but the schema already provides sufficient meaning. Baseline 3 is appropriate for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Remove a user from a package's maintainer list') with a specific verb and resource. It distinguishes this tool from siblings like npm_owner_add and npm_maintainers by focusing on removal from the maintainer list.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for removing a maintainer, but it does not explicitly state when to use this tool vs alternatives (e.g., npm_owner_add for adding, npm_maintainers for viewing). There is no 'when not to use' guidance, leaving the context to be inferred from the tool's name and sibling list.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

npm_packageA
Read-onlyIdempotent

Get package metadata — description, dist-tags, latest version, maintainers, license, repository, keywords. Does not include per-version details (use npm_version for that).

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesPackage name (e.g. 'express' or '@anthropic-ai/sdk')

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already convey read-only, idempotent, and non-destructive behavior. The description adds useful scope limitations: what fields are returned and that per-version details are excluded. This goes beyond the structured hints, though it stops short of describing potential errors or rate limiting, which are not critical for this simple read operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two compact sentences: the first leads with the verb and resource, the second clarifies the scope exclusion. No filler words, clear punctuation, and front-loaded purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a single-parameter, read-only tool with no output schema, the description is sufficient. It lists the return fields, clarifies what is not included, and points to the right alternative. No other contextual gaps exist for the agent to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already provides 100% coverage of the single 'name' parameter, including an example. The tool description adds no further parameter-level semantics. The baseline of 3 applies since the schema does the heavy lifting.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Get package metadata' and enumerates specific fields (description, dist-tags, latest version, maintainers, license, repository, keywords). It also explicitly distinguishes itself from npm_version by noting it does not include per-version details, which pins down its unique purpose among siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit when-not-to-use guidance ('Does not include per-version details') and names the alternative tool ('use npm_version for that'). This tells the agent exactly when to choose this tool over its sibling.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

npm_package_accessA
Read-onlyIdempotent

Get package access settings — visibility (public/private), whether publish requires 2FA, and whether automation tokens can bypass 2FA. Critical for understanding why CI publishing fails: if publish_requires_tfa is true but automation_token_overrides_tfa is false, automation tokens cannot publish.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesPackage name (e.g. 'express' or '@yawlabs/npmjs-mcp')

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context by explaining the interaction between publish_requires_tfa and automation_token_overrides_tfa, which helps interpret the response. It does not mention rate limits or auth, but the annotations reduce the burden.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences: the first states the purpose with the key fields, the second gives a critical diagnostic interpretation. No redundant words, front-loaded with the verb 'Get'. Every sentence contributes value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only tool with one parameter and no output schema, the description is complete. It lists the returned settings and explains their significance for a common failure scenario. No gaps in expected behavior or return payload.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with a descriptive parameter 'name' including an example. The description does not add anything about the parameter itself, but the baseline of 3 applies given the schema fully handles it.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description starts with 'Get package access settings' and specifies exactly what settings: visibility, 2FA requirement, and automation token override. This clearly distinguishes it from mutation tools like npm_access_set and npm_access_set_mfa among siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a clear context for use: 'Critical for understanding why CI publishing fails' and explains the diagnostic condition. It does not explicitly name alternatives or state when not to use it, but the use case is unambiguous and sufficient for distinguishing from related tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

npm_profileA
Read-onlyIdempotent

Get the authenticated user's npm profile — name, email, 2FA status, creation date. Useful for checking whether 2FA is enabled (which affects token requirements for publishing).

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds useful context beyond that: it confirms the tool operates on the authenticated user (implying auth requirements), lists the returned fields, and links the 2FA status to publishing workflow. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences, leads with the action and resource, and every phrase adds value. It is appropriately front-loaded and free of redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given a zero-parameter, read-only tool with no output schema, the description is complete. It lists the returned fields, implies the need for authentication, and cites a concrete use case, which is sufficient for an agent to select and invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has zero parameters and schema coverage is 100%, so there are no parameter semantics to document. Per the rubric, zero parameters yields a baseline of 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Get') and resource ('authenticated user's npm profile') and enumerates the fields returned (name, email, 2FA status, creation date). This distinguishes it from siblings like npm_whoami, which likely returns only the username.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly states a key use case: checking whether 2FA is enabled and how that affects token requirements for publishing. This gives clear context for when to use the tool, though it does not explicitly name alternatives or exclusions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

npm_provenanceA
Read-onlyIdempotent

Retrieve Sigstore attestations for a specific package version. Shows SLSA provenance (which CI built it, from which repo/commit) and publish attestations. NOTE: this tool RETRIEVES attestations from the registry -- it does NOT perform cryptographic signature, certificate-chain, or Rekor transparency-log verification. Use a dedicated Sigstore client to cryptographically verify the bundles.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesPackage name (e.g. '@anthropic-ai/sdk')
versionYesExact semver version (e.g. '1.0.0')

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes well beyond the annotations (readOnlyHint, openWorldHint, etc.) by disclosing that it does NOT perform cryptographic signature verification, certificate-chain verification, or Rekor transparency-log verification. This is valuable behavioral context that prevents misuse.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and front-loaded with the main verb and resource, followed by a clear explanation of the output and a necessary limitation note. Every sentence earns its place without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (2 required params, no output schema), the description provides a complete picture of what the tool retrieves and its limitations. It explains the return type conceptually (SLSA provenance and publish attestations) so an agent knows what to expect.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already provides 100% coverage with descriptions for both 'name' and 'version', including examples and the requirement for an exact semver. The description adds no additional parameter-level semantics, so the baseline score of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'Retrieve' with a clear resource ('Sigstore attestations for a specific package version') and explains what will be shown (SLSA provenance and publish attestations). This clearly distinguishes it from sibling tools like npm_signing_keys or npm_trusted_publishers.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when NOT to use this tool for cryptographic verification and directs users to a dedicated Sigstore client instead. This provides clear exclusions and an alternative, going beyond a simple 'when to use' statement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

npm_publish_preflightA
Read-onlyIdempotent

Comprehensive pre-publish validation — run before publishing ANY npm package. Returns an actionable checklist with pass/fail/warn for each item.

ASSUMES NON-INTERACTIVE CONTEXT BY DEFAULT because MCP servers are called by AI agents that:

  • CANNOT open browsers (so --auth-type=web is useless)

  • CANNOT enter OTP codes

  • CANNOT retry with 2FA — this is a hand-off to the human

Checks: auth token validity, 2FA requirements, token type inference, org-level token reuse, package name availability, maintainer access, scoped package settings.

When issues are found, returns structured actions with exact commands for the HUMAN to run in their terminal — never suggests actions an agent cannot perform.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesPackage name to publish (e.g. '@yawlabs/npmjs-mcp')

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description goes beyond the readOnlyHint/idempotentHint annotations by detailing the non-interactive assumptions, the pass/fail/warn checklist return, and the structured actions with exact human-run commands. It also explains why the tool behaves this way (agent constraints), providing rich behavioral context with no contradiction to annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with a one-line purpose, followed by a compact, information-dense breakdown of checks and behavioral constraints. Every sentence contributes value—the non-interactive caveat, the checklist scope, and the output mode—without filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description thoroughly covers return semantics (actionable checklist with pass/fail/warn, exact human commands), prerequisites (non-interactive), and distinguishes itself from related publish operations. It provides everything an agent needs to select and invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 100% coverage for the single parameter 'name' ('Package name to publish (e.g. '@yawlabs/npmjs-mcp')'). The description does not add extra parameter details, so the baseline of 3 is appropriate; the parameter is simple and unambiguous.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Comprehensive pre-publish validation — run before publishing ANY npm package.' It distinguishes itself from sibling tools by covering a broad checklist (auth, 2FA, package name availability, maintainer access, etc.) rather than a single concern like npm_check_auth.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly instructs to 'run before publishing ANY npm package', and explains the non-interactive context assumptions (no browsers, no OTP entry). It clarifies that 2FA issues are a hand-off to the human, and 'never suggests actions an agent cannot perform', providing clear when-to-use and behavioral boundaries.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

npm_readmeB
Read-onlyIdempotent

Get the README content of a package.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesPackage name

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, covering safety behavior. The description adds no extra behavioral context, such as return format, error handling, or pagination, but it does not contradict annotations. This is acceptable but not contributive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, short sentence that conveys the essential purpose without any filler. It is front-loaded and every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with one well-documented parameter, rich annotations, and no output schema, the description is sufficient. It could be improved by specifying the return format or handling of missing READMEs, but these are not essential for basic tool selection.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema provides 100% coverage with the parameter 'name' described as 'Package name'. The description only repeats this by saying 'of a package', adding no extra semantic value beyond the schema, hence the baseline score of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves README content for a package, using a specific verb and resource. However, it does not explicitly differentiate from sibling tools like npm_package, which may also provide README in package metadata, so it stops short of full distinction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives such as npm_package or npm_search. It does not mention exclusions, prerequisites, or context, leaving the agent without direction for tool selection.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

npm_recent_changesA
Read-only

Get 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.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoNumber of recent changes (default 25, max 100)

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds meaningful context beyond the annotations by identifying the specific source (replicate.npmjs.com) and warning about intermittent availability. It does not detail pagination or return format, but the reliability warning is valuable behavioral information.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences that are front-loaded with the primary action and followed by a necessary caveat. Every word earns its place; there is no redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only tool with one optional parameter and strong annotations, the description is largely complete. It states the source and warns of availability issues. Omitting response structure is acceptable given the lack of an output schema and the tool's straightforward nature.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already fully documents the `limit` parameter (default 25, max 100). The description adds no additional parameter information, so the baseline score of 3 is appropriate given the high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: retrieving recent package publishes/updates from the npm registry via the CouchDB changes feed. The verb 'Get' and resource 'npm registry' are specific, and it is easily distinguished from sibling tools like npm_search or npm_registry_stats.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is for recent changes but does not explicitly specify when to use it over alternatives or when not to use it. The availability note about replicate.npmjs.com is a caveat, not a usage guideline. No direct comparison to sibling tools is provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

npm_registry_statsA
Read-onlyIdempotent

Get total npm-wide download counts for a period. Shows overall registry activity.

ParametersJSON Schema
NameRequiredDescriptionDefault
periodNoPeriod: 'last-day', 'last-week', 'last-month' (default: 'last-week')

TDQS

A3.8/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is known. The description adds the scope ('npm-wide') but does not disclose additional behavioral traits like response format, aggregation details, or rate limits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two short sentences with no redundancy. Every word contributes to communicating the tool's purpose and scope.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter, read-only tool with strong annotations, the description is sufficient. It specifies the scope and the result (download counts). It lacks explicit comparison to sibling download tools, but this is a minor gap given the tool's simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 100% coverage for the single 'period' parameter, including its options and default. The tool description adds no further parameter information, so it relies on the schema as the baseline.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's action (get) and resource (total npm-wide download counts), and explicitly scopes it as 'npm-wide' and 'overall registry activity'. This distinguishes it from package-specific download tools like npm_downloads, making the purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for registry-wide activity but does not explicitly mention alternatives or exclusion scenarios. Given the many sibling tools for downloads, it would benefit from a direct comparison or a 'use this for X, not Y' statement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

npm_release_frequencyA
Read-onlyIdempotent

Analyze the release cadence of a package — publish timeline, gaps, and whether the project is actively maintained.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesPackage name
limitNoNumber of recent releases to analyze (default 20)

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare read-only, idempotent, and non-destructive behavior. The description adds context about what is analyzed (timeline, gaps, maintenance) but does not disclose additional behavioral traits like pagination, rate limits, or how 'limit' affects analysis. It adds some value but not rich detail.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

A single, front-loaded sentence that states the main purpose and key outputs without extraneous words. Every word earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only tool with 2 well-documented parameters and no output schema, the description sufficiently conveys what the tool does and what it returns (timeline, gaps, maintenance status). It could mention the role of 'limit' more explicitly, but the schema covers it, so the description is adequate.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has 100% coverage with clear descriptions for both 'name' and 'limit'. The description does not add any parameter-specific meaning beyond the schema, so the baseline of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies a specific action ('Analyze') and resource ('release cadence of a package'), and elaborates with the outputs ('publish timeline, gaps, and whether the project is actively maintained'). It does not explicitly differentiate from sibling tools, but the focus on cadence is distinct enough to avoid confusion.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is for analyzing release timeliness and maintenance status, but provides no explicit 'when to use' vs alternatives, no exclusions, and no comparison with similar npm_* tools. Usage is inferred from the purpose statement.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

npm_signing_keysA
Read-onlyIdempotent

Get the npm registry's ECDSA signing keys used to verify package signatures.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, which fully convey the safe, non-mutating behavior. The description adds context that the keys are ECDSA and used for signature verification, but it does not provide additional behavioral details such as return format or authentication requirements. Given strong annotation coverage, this is adequate but not exceptional.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The entire description is a single, focused sentence: 'Get the npm registry's ECDSA signing keys used to verify package signatures.' Every word contributes to the meaning, with no redundancy or extraneous detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple, no-parameter, read-only metadata retrieval tool with comprehensive annotations, the description is fully sufficient. The lack of an output schema is not a gap because the purpose is straightforward and the strong annotations cover safety and side-effect expectations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters, and the schema's 100% coverage trivially satisfies parameter documentation. The description naturally implies a no-input fetch. The baseline for zero parameters is 4, and the description adds no additional parameter-related semantics, which is acceptable.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool retrieves the npm registry's ECDSA signing keys used for package signature verification. This specific verb+resource phrasing distinguishes it from all sibling tools, which focus on other aspects like packages, auth, or registry statistics.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool (when signing keys are needed to verify package signatures) and there are no similar sibling tools that would require explicit differentiation. However, no explicit exclusions or alternative tool references are given, so it falls short of a perfect score.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

npm_team_createB

Create a team inside an organization. Team is passed as '@scope:team'.

ParametersJSON Schema
NameRequiredDescriptionDefault
teamYesTeam in the form '@scope:team'
descriptionNoOptional team description

TDQS

B3.2/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate this is a non-read-only, non-idempotent, non-destructive operation, but the description adds no extra behavioral context beyond that. It does not mention permissions, side effects, failure modes, or what happens on duplicate teams. The description merely restates the core action without exceeding annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single concise sentence that communicates the essential purpose and format. It is appropriately short, though it could slightly benefit from a note about the required format being part of the parameter rather than the tool-level description.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With no output schema, the description does not explain what a successful creation returns, and no mention of error conditions or permissions. Given the tool's simplicity and annotation coverage, it is adequate but has clear gaps for an agent to call it with full confidence.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already documents both parameters completely (team with format, description as optional). The description's mention of '@scope:team' is redundant with the schema description. Since schema coverage is 100%, the baseline is 3 with no additional semantic value added.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Create a team inside an organization') with a specific verb and resource. It also includes the exact format '@scope:team', which distinguishes it from related team management tools like npm_team_delete or npm_team_members.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives, prerequisites, or context such as required authentication or organization membership. The description only states what it does, leaving the agent to infer usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

npm_team_deleteA
DestructiveIdempotent

Delete a team. Team is passed as '@scope:team'. Revokes all package permissions that team held, and team memberships are also removed. Requires confirm: true — this removes the team and all its package grants in one call. List the team's current grants with npm_team_packages first if you need to preserve them.

ParametersJSON Schema
NameRequiredDescriptionDefault
teamYesTeam in the form '@scope:team'
confirmYesMust be literally true. Guards against accidental team deletion.

TDQS

A4.5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate destructive and non-read-only behavior, but the description adds valuable detail: it revokes all package permissions, removes team memberships, requires confirm: true, and performs the operation in one call. This goes beyond the structured annotations and gives the agent a clear picture of side effects.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, each earning its place: the action, the side effects, and the precautionary tip. No redundancy or filler, with the most critical information front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive tool with two parameters and no output schema, the description covers all essential aspects: the operation, required confirmation, consequences, and how to mitigate data loss. It is fully self-contained and leaves no important gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, with both team and confirm already well documented. The description echoes the confirm requirement but does not add meaningful parameter-level detail beyond what the schema provides. Baseline 3 is appropriate since the schema carries the parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Delete a team') and specifies the input format ('@scope:team'). It also lists the consequences (revokes all package permissions, removes memberships), which distinguishes it from sibling tools like npm_team_revoke or npm_team_member_remove that operate on narrower scopes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives clear usage context: requires confirm: true and warns to preserve grants by listing them with npm_team_packages first. However, it does not explicitly contrast with alternatives like npm_team_revoke, so the guidance is strong but not exhaustive.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

npm_team_grantA
DestructiveIdempotent

Grant a team read-only or read-write permission on a package. Scope and team are passed as @scope:team (e.g. '@yawlabs:devs'). Requires org admin or team admin.

ParametersJSON Schema
NameRequiredDescriptionDefault
teamYesTeam in the form '@scope:team' (e.g. '@yawlabs:devs')
packageYesPackage name. Field is named 'package' to match the npm CLI (diverges from 'name' used elsewhere in this server).
permissionsYesPermission level

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description adds the authorization requirement, which is useful behavioral context not in annotations. It does not describe side effects (e.g., overwriting existing permissions), but annotations already indicate destructive and idempotent hints, so the bar is lower. The description doesn't contradict annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the core action, followed by format and authorization details. Every sentence earns its place with no waste or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the action, input format, and prerequisites, which is sufficient given the schema richness and annotations. It doesn't describe outputs, but no output schema exists and the info is adequate for selection and invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema already describes all three parameters with examples and enum values, and the description adds no new parameter-level detail beyond repeating the 'scope:team' format already in the schema. With 100% schema coverage, baseline is 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Grant'), the resource ('a team ... permission on a package'), and specific permission levels ('read-only or read-write'). It also gives the format for team scope, distinguishing it from sibling tools like revoke or delete.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context by stating prerequisites ('Requires org admin or team admin') and implicitly defines when to use it (to grant team permissions). However, it does not explicitly name alternatives or exclusions, so it doesn't fully meet the 'when-not' guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

npm_team_member_addA
Idempotent

Add a user to a team. Team is '@scope:team'. User must already be in the org.

ParametersJSON Schema
NameRequiredDescriptionDefault
teamYesTeam in the form '@scope:team'
userYesnpm username

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=false and idempotentHint=true, so the mutation and idempotency are known. The description adds the team format and org precondition, which is useful context, but does not disclose side effects or permission requirements. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two short sentences with zero wasted words. The core action is front-loaded, followed by the format and precondition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple 2-parameter tool with full schema coverage and informative annotations, the description covers the essential call context. It could mention permission requirements or error cases, but none are critical for agent invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with both parameters documented ('@scope:team' and 'npm username'). The description repeats the team format and adds the org precondition, but does not add meaning beyond the schema for parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Add') and resource ('user to a team'), and clearly defines the team format ('@scope:team'). It is unambiguous and distinguished from siblings like npm_team_member_remove.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides clear context including the required team format and the precondition that the user must already be in the org. It does not name alternative tools or explicitly state when not to use it, but the usage context is sufficiently clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

npm_team_member_removeA
DestructiveIdempotent

Remove a user from a team. Team is '@scope:team'. User remains in the org.

ParametersJSON Schema
NameRequiredDescriptionDefault
teamYesTeam in the form '@scope:team'
userYesnpm username

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate destructive and non-read-only behavior. The description adds useful context that the user remains in the org, clarifying that only team membership is affected. No contradiction with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is composed of two short, focused sentences. Every word adds value, with no redundancy or filler.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter mutation tool with no output schema, the description covers the operation, team format, and the key side effect. It does not mention permissions or error behavior, but these are not critical for such a straightforward tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema provides 100% description coverage for both parameters. The tool description only restates the team format already in the schema, adding no additional semantic value beyond what is available.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function with a specific verb and resource ('Remove a user from a team'). It also specifies the team format ('@scope:team') and clarifies the scope (user remains in the org), which distinguishes it from org-level removal tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context on the team format and the operation's scope, implying when to use it. However, it does not explicitly name alternative tools or state exclusions for when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

npm_team_membersA
Read-onlyIdempotent

List all members of a team with their roles (e.g. 'developer'). Complements npm_team_member_add and npm_team_member_remove — use this to audit who is currently on the team before adding or removing members.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgYesOrganization name (without @ prefix)
teamYesTeam name

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds useful context (role inclusion, audit use) but does not describe return format or pagination behavior, so it doesn't go beyond annotations in a rich way.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with no filler. The first sentence front-loads the core purpose and the second adds high-value complementary/usage guidance, making every word earn its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple, non-destructive list tool, annotations cover safety, schema covers all required parameters, and the description indicates the return nature (members with roles). The sibling context is clear, making the description sufficient for selection and invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema descriptions cover both parameters (org and team) at 100%, so the description doesn't need to repeat param details. The description adds no extra semantic value beyond the schema, so baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific action ('List') and resource ('all members of a team') and clarifies it includes roles. It also distinguishes itself from the sibling tools npm_team_member_add and npm_team_member_remove by positioning itself as the read/audit counterpart.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly names complementary tools and gives direct guidance: use this to audit current team membership before adding or removing members. This clearly tells the agent when to select this tool over alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

npm_team_packagesA
Read-onlyIdempotent

List all packages a specific team has access to and their permission levels (read-only or read-write). Useful for auditing team permissions.

ParametersJSON Schema
NameRequiredDescriptionDefault
orgYesOrganization name (without @ prefix)
teamYesTeam name

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and destructiveHint=false, so the description is not burdened with safety disclosure. It adds the behavioral detail about returning permission levels, which is helpful, but does not go further into auth requirements, rate limits, or return structure—acceptable given the annotation coverage.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences with zero waste: the first states the primary action and scope, the second states a valid use case. Information is front-loaded and each clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only list tool with rich annotations and only two parameters, the description is complete. It clearly states what is listed and why it is useful. The absence of an output schema is compensated by the mention of 'permission levels' in the description, making the return content inferable.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description does not add additional meaning to the parameters beyond what the schema already states (org and team names). It simply refers to 'a specific team' which is redundant with the team parameter.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('List'), clearly identifies the resource ('all packages a specific team has access to'), and adds distinguishing detail about permission levels ('read-only or read-write'). This clearly differentiates it from siblings like npm_org_packages and npm_user_packages by scoping to a team.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The sentence 'Useful for auditing team permissions' provides a clear use case and context. It does not explicitly exclude alternatives or name sibling tools, but the context is sufficient for an agent to decide when this tool is appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

npm_team_revokeA
DestructiveIdempotent

Revoke a team's access to a package. Team is passed as '@scope:team'. Does not delete the team itself — use npm_team_delete for that.

ParametersJSON Schema
NameRequiredDescriptionDefault
teamYesTeam in the form '@scope:team'
packageYesPackage name. Field is named 'package' to match the npm CLI (diverges from 'name' used elsewhere in this server).

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate destructiveHint=true and idempotentHint=true, and the description adds the valuable context that the team itself is not deleted—only its access to the package is revoked. This clarifies the scope of destructive action beyond what annotations alone convey.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the primary action, and each sentence earns its place. It is concise, readable, and free of unnecessary detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple tool with two well-documented parameters and no output schema, the description provides sufficient context: what it does, the team format, and an explicit caveat about team deletion. The sibling list provides additional context, and the description is complete for the tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%: both 'team' and 'package' have descriptions that include the '@scope:team' format and the naming rationale for 'package'. The description does not add meaning beyond the schema, so it meets the baseline for high coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action: 'Revoke a team's access to a package.' It uses a specific verb and resource, and explicitly distinguishes itself from npm_team_delete by noting it does not delete the team itself. This differentiates it from sibling tools like npm_team_grant and npm_team_delete.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly tells the agent when to use this tool (to revoke a team's package access) and when not to (if the goal is to delete the team, use npm_team_delete). This provides clear usage guidance and a named alternative, exceeding the minimum.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

npm_token_revokeA
DestructiveIdempotent

Revoke an access token by its key (UUID from npm_tokens). Requires confirm: true. Revoking the token currently in use by NPM_TOKEN will break the next call. Creating tokens is NOT exposed because the endpoint requires the user password — create via https://www.npmjs.com/settings/~/tokens instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
confirmYesMust be literally true. Guards against revoking the token you're authenticating with.
tokenKeyYesToken key (UUID shown by npm_tokens)

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate destructiveHint: true and readOnlyHint: false, so the description doesn't need to restate those. However, it adds valuable context beyond annotations by explaining the consequence of revoking the currently used token and the reason token creation is not exposed (requires user password). This is useful behavioral disclosure.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact (four short sentences) and front-loaded with the primary purpose. Every sentence adds meaningful context: operation, prerequisite, risk, and alternative. No filler or redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive tool with only two parameters and no output schema, the description covers purpose, confirmation requirement, side effects, and creation alternatives. It could mention the success/error response shape, but that is not critical given the low complexity. The warning about breaking the next call is a strong safety context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%, with both tokenKey and confirm having descriptive text. The description reiterates 'Requires confirm: true' and the tokenKey provenance, but does not add meaning beyond the schema. Baseline 3 is appropriate because the schema already carries the semantic weight.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Revoke an access token by its key (UUID from npm_tokens)', which identifies the specific action (revoke), the resource (access token), and the key mechanism. This clearly differentiates it from sibling tools like npm_tokens (listing) or npm_verify_token (verification).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states 'Requires confirm: true' as a prerequisite, warns about breaking the next call if revoking the current token, and provides alternative guidance for token creation ('create via https://www.npmjs.com/settings/~/tokens instead'). This gives the agent clear when-to-use and when-not-to-use context.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

npm_tokensA
Read-onlyIdempotent

List all access tokens for the authenticated npm user. Shows token type, creation date, CIDR restrictions, and read-only status. Critical for finding reusable automation/granular tokens that cover your org scope — avoids the common mistake of creating duplicate tokens or using publish tokens in CI (which still require OTP).

ParametersJSON Schema
NameRequiredDescriptionDefault
pageNoPage number for pagination (default: 0)
perPageNoResults per page (default: 25)

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds useful behavioral context beyond those annotations by revealing that listed tokens may be reusable automation tokens and that publish tokens require OTP in CI, which informs token-reuse decisions. No contradiction with annotations detected.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three focused sentences: the first states the action, the second lists output fields, and the third gives practical guidance. There is no filler or repetition; the description is front-loaded and every sentence earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple paginated list tool with rich annotations and parameter schema, the description is complete. It states the user scope, enumerates the returned fields, and adds a real-world use case. No output schema exists, but the description sufficiently covers return content.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100% with clear default and range documentation for both page and perPage. The description adds no parameter-level meaning, but schema already carries the full burden, so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource: 'List all access tokens for the authenticated npm user.' It also enumerates the returned fields (token type, creation date, CIDR restrictions, read-only status), which clearly distinguishes it from sibling write/token-check tools like npm_token_revoke and npm_verify_token.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly frames when this tool is valuable: 'Critical for finding reusable automation/granular tokens that cover your org scope' and warns against 'using publish tokens in CI (which still require OTP).' This gives actionable context for tool selection, though it does not name alternative tools directly or state explicit when-not scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

npm_trusted_publishersA
Read-onlyIdempotent

List trusted publishing configurations for a package. Shows OIDC trust relationships with CI/CD providers (GitHub Actions, GitLab CI, CircleCI) that allow tokenless publishing. Requires authentication with write access to the package.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesPackage name (e.g. 'express' or '@yawlabs/npmjs-mcp')

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint, so the description adds value by disclosing the authentication requirement ('write access to the package') and the type of data shown (OIDC trust with CI/CD providers). This goes beyond the annotation defaults without contradicting them.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences long, with the main action front-loaded. Every sentence adds meaningful context: the resource and content first, then the authentication requirement. There is no redundancy or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter, read-only tool, the description covers purpose, content, and authentication requirements. It lacks an explicit return-format description, but the absence of an output schema makes that less critical. The description is sufficient for an agent to decide when and how to invoke it.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema fully describes the single parameter 'name' with an example, so the description does not need to add much. The description adds no extra semantic detail beyond what the schema already provides, earning the baseline score for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's verb and resource: 'List trusted publishing configurations for a package.' It further distinguishes itself by specifying the content (OIDC trust relationships with CI/CD providers) and the purpose (tokenless publishing), which differentiates it from sibling tools like npm_provenance or npm_signing_keys.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool: to inspect OIDC trust relationships for a package. It also notes the prerequisite of having write access, which is a usage boundary. However, it does not explicitly name alternatives or state when not to use it, leaving some room for interpretation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

npm_typesA
Read-onlyIdempotent

Check TypeScript type support for a package — whether it ships built-in types (types/typings field) or has a DefinitelyTyped companion (@types/* package).

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesPackage name (e.g. 'express' or '@anthropic-ai/sdk')
versionNoSemver version or dist-tag (default: 'latest')

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, openWorldHint=true, idempotentHint=true, and destructiveHint=false, providing a strong safety profile. The description adds context about what the tool checks (built-in types vs. DefinitelyTyped) but doesn't disclose return format, error handling, or edge cases. This is comparable to the get_calls example where annotations carry the safety burden and the description adds only moderate behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single sentence that starts with the action verb 'Check' and immediately states the resource and scope. It avoids redundant information and is perfectly sized for the tool's simplicity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only query tool with comprehensive annotations and full schema coverage, the description adequately covers the purpose. It doesn't explain the return shape, but that is not critical given the tool's straightforward nature and the absence of an output schema. The description is complete enough for an agent to select and invoke the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema fully documents both parameters (name and version), including the default for version. With 100% schema coverage, the baseline is 3, and the description doesn't add any extra parameter semantics beyond what the schema already provides. No additional explanation of parameters is needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly specifies the tool's purpose: checking TypeScript type support for a package. It distinguishes between built-in types and DefinitelyTyped companion packages, which sets it apart from sibling tools like npm_package that focus on general package info. The action verb 'Check' is specific and the resource is clearly identified.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use this tool: whenever an agent needs to determine type support for an npm package. It doesn't explicitly mention alternatives or exclusions, but given the tool's name and the explicit focus on TypeScript types, the usage context is clear. A direct comparison with npm_package or npm_health would have improved the score.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

npm_undeprecateA
DestructiveIdempotent

Clear the deprecation message from a package or specific versions. Equivalent to npm_deprecate with an empty message but more explicit about intent.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesPackage name
versionRangeNoSemver range. Omit to undeprecate ALL versions.

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations already declare readOnlyHint=false, destructiveHint=true, and idempotentHint=true, so the description doesn't need to restate mutation risk. It adds value by explaining that clearing the deprecation message is the behavior, and that it is 'more explicit about intent', which helps the agent understand the semantic effect. No contradictions with annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is only two sentences, both directly relevant. It starts with the core action 'Clear the deprecation message' and then adds a concise equivalence note, with no wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter mutation tool, the description covers the purpose and relationship to npm_deprecate, and the schema fully defines the parameters. The annotations provide the safety profile, so nothing critical is missing. The only minor gap is lack of mention of permissions or access requirements, but that's beyond what might be expected given the annotations.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema covers 100% of parameters with descriptions: 'name' as package name and 'versionRange' with the note about omitting to undeprecate all versions. The description's mention of 'package or specific versions' adds no additional detail beyond the schema, so the baseline score of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'clear' and identifies the resource ('deprecation message from a package or specific versions'), which clearly states the tool's function. It also distinguishes itself from sibling npm_deprecate by explicitly referencing the equivalence, making the purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides guidance by noting equivalence to 'npm_deprecate with an empty message', framing when this tool is the appropriate choice instead of using npm_deprecate directly. It doesn't explicitly list exclusions or alternatives, but the context is clear enough for an agent to select it when the goal is removal rather than setting a deprecation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

npm_unpublish_packageA
Destructive

Unpublish an ENTIRE package (all versions). DELETE /{pkg}/-rev/{rev}. IRREVERSIBLE: the name is blocked for 72 hours and cannot be re-published. For single-version unpublish prefer npm_unpublish_version. Requires confirm: true.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesPackage name
confirmYesMust be literally true. Guards against accidental full unpublish.

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already indicate destructiveHint=true, but the description adds critical context beyond that: the operation is IRREVERSIBLE, the name is blocked for 72 hours, and cannot be re-published. This goes beyond the structured metadata and gives the agent essential behavioral consequences.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences long, front-loaded with the primary action and scope, followed by the key warning, then the alternative, and finally the confirmation requirement. Every sentence carries essential information with no waste.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive tool, the description covers the essential context: what it does, its scope, the irreversibility and 72-hour block, the alternative for single versions, and the confirm requirement. There is no output schema, but for an unpublish operation, return values are less critical. The description is complete enough for an agent to use the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema documents both parameters. The description adds minimal semantic value beyond emphasizing 'Requires confirm: true', which is already encoded in the schema as const. It does not compensate with additional details, hence the baseline score of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool unpublishes an ENTIRE package (all versions), which is a specific verb+resource+scope. It distinguishes itself from the sibling tool npm_unpublish_version by explicitly mentioning 'all versions' and directing single-version unpublishes elsewhere.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It explicitly provides usage guidance: 'For single-version unpublish prefer npm_unpublish_version.' This names the alternative and clarifies when to use this tool vs. another. The warning about irreversibility and the 72-hour block also informs decision-making.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

npm_unpublish_versionA
Destructive

Unpublish a specific version of a package. IRREVERSIBLE: once unpublished, the version cannot be re-published and will be blocked for 72 hours. Only works within 72 hours of the original publish for most packages. Requires explicit confirm: true to prevent accidents. Follows the npm CLI flow (mutate packument + delete tarball). For full-package unpublish use npm_unpublish_package. Dist-tag handling: any dist-tag that pointed at the unpublished version is removed. Only latest is auto-reassigned (to the highest remaining stable version). Other tags like next/beta are left unset — reassign them explicitly with npm_dist_tag_set if needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesPackage name
confirmYesMust be literally true. Guards against accidental unpublish.
versionYesSpecific version to unpublish (e.g. '1.2.3')

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already flag destructiveHint=true, but the description adds critical detail: irreversibility, 72-hour block, and exact dist-tag behavior (auto-reassign only 'latest', others left unset). This goes well beyond the annotation's binary flag.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but each sentence carries unique weight—irreversibility, time window, safety mechanism, CLI flow, sibling distinction, and dist-tag side effects. No filler; well-structured with the core action first.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a destructive irreversible operation, this description is comprehensive: it explains consequences, constraints, side effects, and next steps. Absence of output schema is acceptable as no structured output is expected.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema already covers all three parameters with descriptions, so baseline is 3. The description reinforces the confirm parameter's purpose but doesn't add new parameter semantics beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states it unpublishes a specific version of a package. Differentiates from sibling npm_unpublish_package by explicitly naming it as the alternative for full-package unpublish.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit guidance: only works within 72 hours, requires confirm=true, and for full-package unpublish use npm_unpublish_package. Also advises on reassigning dist-tags with npm_dist_tag_set after side effects.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

npm_user_packagesB
Read-onlyIdempotent

List all packages published by a specific npm user. Shows package names and the user's access level for each. Requires authentication.

ParametersJSON Schema
NameRequiredDescriptionDefault
usernameYesnpm username

TDQS

B3.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds the authentication requirement, which is useful context beyond annotations. However, it does not disclose pagination, error behavior, or rate limits, so it adds only moderate value.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two sentences, front-loaded with the primary action, and contains no redundant wording. Every sentence serves a purpose: stating what the tool does, what it returns, and its authentication requirement.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple single-parameter, read-only tool with good annotations, the description adequately covers purpose, output, and auth requirement. It doesn't mention edge cases like nonexistent users or pagination, but these are not critical for basic invocation. Slight deduction for lacking any mention of access-level semantics.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with a single parameter 'username' described as 'npm username.' The description does not add further meaning beyond the schema, but the schema already provides sufficient clarity. Baseline 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses the specific verb 'List' with a clear resource: 'packages published by a specific npm user.' It also states what is shown (package names and access level). However, it does not explicitly distinguish itself from sibling tools like npm_org_packages or npm_team_packages, so it falls short of a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It mentions 'Requires authentication' but does not state preconditions, exclusions, or alternative tools. The intended usage is only implied by the purpose.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

npm_verify_tokenA
Read-onlyIdempotent

Verify the NPM_TOKEN and surface its capabilities — username, 2FA status, and whether writes are likely to succeed. Call this FIRST when debugging any write failure to rule out auth issues before trying other fixes. Faster than running writes and interpreting 401/403 errors.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds meaningful context beyond these: it surfaces username, 2FA status, and whether writes are likely to succeed, and notes it's faster than running writes. This provides behavioral insight not present in the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences, front-loaded with the core purpose, and every sentence contributes value. No redundancy or unnecessary detail.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter tool with no output schema, the description is complete: it explains what it does, when to use it, what it surfaces, and why it's beneficial. The tool's simplicity makes this sufficient for an agent to select and invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters and an empty input schema, so the baseline is 4. The description correctly focuses on the tool's behavior rather than parameter details, which is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool verifies the NPM_TOKEN and surfaces its capabilities (username, 2FA status, write likelihood). This specific verb+resource combination distinguishes it from sibling tools like npm_whoami or npm_check_auth, which focus on identity or auth status in different ways.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says 'Call this FIRST when debugging any write failure to rule out auth issues before trying other fixes,' giving clear when-to-use guidance. It also compares against running writes and interpreting errors, though it doesn't name specific alternative tools explicitly.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

npm_versionA
Read-onlyIdempotent

Get detailed metadata for a specific version — dependencies, dist info, file count, size, deprecation status.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesPackage name
versionNoSemver version or dist-tag (default: 'latest')

TDQS

A4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, idempotentHint=true, and openWorldHint=true, establishing safety. The description adds concrete behavioral details beyond annotations by specifying exactly what metadata is included (dependencies, dist info, file count, size, deprecation status), helping the agent anticipate the return data. It does not contradict annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, well-structured sentence that front-loads the verb and resource. Every word contributes value, listing the major metadata categories without unnecessary elaboration. It is appropriately concise for a simple read tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple with 2 parameters, no output schema, and strong annotations. The description sufficiently conveys what the tool does and what data it returns, which is adequate for an agent to select and invoke it. It lacks details about default version behavior (though that's in the schema) but is otherwise complete for the tool's complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, with both 'name' and 'version' having descriptions. The tool description does not add meaningful semantic detail beyond the schema; it mentions 'specific version' but does not clarify parameter formats or constraints beyond what the schema already states. Baseline of 3 applies because the schema fully documents parameters.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Get') and the resource ('detailed metadata for a specific version'), and enumerates specific metadata types (dependencies, dist info, file count, size, deprecation status). This distinguishes it from sibling tools like npm_versions (list versions) and npm_package (general package info).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage: when you need detailed metadata for a specific version. However, it does not explicitly mention when to use this tool over alternatives like npm_package or npm_versions, nor does it provide any exclusions or alternative tool recommendations. It provides contextual clues but lacks explicit guidance.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

npm_version_downloadsA
Read-onlyIdempotent

Get download counts broken down by version for the last week. Shows version adoption.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesPackage name
periodNoPeriod: 'last-day', 'last-week', 'last-month' (default: 'last-week')

TDQS

A4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true, covering the safety profile. The description adds the context of 'last week' (despite the configurable period) and the interpretive angle of version adoption, but does not disclose return structure or any API quirks. This is adequate but not exceptional.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is two concise sentences, front-loaded with the action, and every word adds value. 'Shows version adoption' provides a useful interpretive note without bloat.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple two-parameter read-only tool, the description conveys the essential purpose and output concept (per-version counts). Although there is no output schema, the phrasing 'broken down by version' implies the response structure sufficiently. It does not specify the exact format but is complete enough for the tool's simplicity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100%: both 'name' and 'period' are described in the input schema. The description only repeats the default period ('last week') without adding extra meaning, so it does not exceed the baseline of 3 for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Get') and resource ('download counts broken down by version'), clearly distinguishing it from sibling tools like npm_downloads (total downloads) or npm_versions (version list). The added insight 'Shows version adoption' further clarifies the tool's unique value.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description clearly implies the use case: retrieving per-version download statistics. However, it does not explicitly mention when not to use this tool or name alternative tools for total downloads or custom ranges, so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

npm_versionsA
Read-onlyIdempotent

List published versions of a package with their publish dates, ordered newest first. Returns up to limit versions (default 50). Set limit=0 to return all.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesPackage name
limitNoMax versions to return, newest first (default 50, 0 = all)

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is clear. The description adds valuable behavioral context: the limit default (50), special value 0 to return all, and the newest-first ordering. This goes beyond the schema and annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the core purpose, followed by the key behavioral note about the limit parameter. Zero wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple read-only version listing tool with two parameters and no output schema, the description fully covers behavior (ordering, limit semantics) and is complete. No missing information needed for an agent to use it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the schema already documents both parameters. The description reiterates the limit behavior (default 50, 0 = all) but does not add new meaning beyond what the schema provides. Baseline 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool lists published versions of a package with publish dates, ordered newest first. This distinguishes it from sibling tools like npm_version (likely a specific version detail) and npm_dist_tags (tags, not versions).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear usage context: list versions of a package. It does not explicitly name alternatives or exclusions, but the purpose is unambiguous and distinct from sibling tools, so the context is sufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

npm_whoamiA
Read-onlyIdempotent

Check the currently authenticated npm user. Verifies the NPM_TOKEN is valid and returns the associated username. Essential for debugging auth issues before publishing.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint=true and idempotentHint=true, and the description adds that it verifies NPM_TOKEN validity and returns the username. This gives the agent useful behavioral insight into error handling and output beyond what annotations provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is exactly two sentences, front-loaded with the primary action and enriched with a use case. Every word earns its place, with no redundancy or fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a zero-parameter tool with strong annotations and a simple return value, the description fully covers what the tool does, why it exists, and when to use it. It mentions the NPM_TOKEN dependency and the username return, which is complete for an agent to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool takes zero parameters, so schema coverage is trivially 100%. With no parameters to document, the baseline is 4, and the description appropriately does not need to add parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool checks the currently authenticated npm user and verifies NPM_TOKEN validity, which is specific and action-oriented. It does not explicitly distinguish from siblings like npm_check_auth or npm_verify_token, but the core purpose is unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear context by saying it is 'Essential for debugging auth issues before publishing.' This implies when to use it, though it does not mention alternatives or exclusions. The context is sufficient for an agent to choose this tool appropriately in most scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 1 tool updatev0.15.1
    • Changednpm_hook_update2 fields changed
      • changedInput schema / properties / endpoint / description
        Previous value: -"New HTTPS URL"New value: +"HTTPS URL for the hook (required — the PUT replaces the whole config)"
      • changedInput schema / properties / secret / description
        Previous value: -"New signing secret"New value: +"Signing secret to store. Always written; pass the existing secret to leave it effectively unchanged."
  2. 64 tool updatesv0.12.2
    • First observednpm_access_set
    • First observednpm_access_set_mfa
    • First observednpm_audit
    • First observednpm_audit_deep
    • First observednpm_check_auth
    • First observednpm_collaborators
    • First observednpm_compare
    • First observednpm_dep_tree
    • First observednpm_dependencies
    • First observednpm_deprecate
    • First observednpm_dist_tag_remove
    • First observednpm_dist_tag_set
    • First observednpm_dist_tags
    • First observednpm_downloads
    • First observednpm_downloads_bulk
    • First observednpm_downloads_range
    • First observednpm_health
    • First observednpm_hook_add
    • First observednpm_hook_get
    • First observednpm_hook_list
    • First observednpm_hook_remove
    • First observednpm_hook_update
    • First observednpm_license_check
    • First observednpm_maintainers
    • First observednpm_ops_playbook
    • First observednpm_org_member_remove
    • First observednpm_org_member_set
    • First observednpm_org_members
    • First observednpm_org_packages
    • First observednpm_org_teams
    • First observednpm_owner_add
    • First observednpm_owner_remove
    • First observednpm_package
    • First observednpm_package_access
    • First observednpm_profile
    • First observednpm_provenance
    • First observednpm_publish_preflight
    • First observednpm_readme
    • First observednpm_recent_changes
    • First observednpm_registry_stats
    • First observednpm_release_frequency
    • First observednpm_search
    • First observednpm_signing_keys
    • First observednpm_team_create
    • First observednpm_team_delete
    • First observednpm_team_grant
    • First observednpm_team_member_add
    • First observednpm_team_member_remove
    • First observednpm_team_members
    • First observednpm_team_packages
    • First observednpm_team_revoke
    • First observednpm_token_revoke
    • First observednpm_tokens
    • First observednpm_trusted_publishers
    • First observednpm_types
    • First observednpm_undeprecate
    • First observednpm_unpublish_package
    • First observednpm_unpublish_version
    • First observednpm_user_packages
    • First observednpm_verify_token
    • First observednpm_version
    • First observednpm_version_downloads
    • First observednpm_versions
    • First observednpm_whoami

TDQS

A3.7/5.0

Scored across 64 tools

Disambiguation4/5

Most tools target distinct resources and actions, with clear boundaries between metadata, downloads, security, teams, and hooks. A few auth-focused tools (npm_whoami, npm_profile, npm_verify_token, npm_check_auth) and download variants (npm_downloads, npm_downloads_range, npm_downloads_bulk) could be confused, but the descriptions help disambiguate them.

Naming Consistency4/5

The npm_ prefix and snake_case are consistent, and most tools follow a resource-first pattern (npm_team_create, npm_hook_add, npm_dist_tag_set). However, a handful of action-first verbs (npm_search, npm_compare, npm_audit) and bare nouns (npm_health, npm_tokens) break the pattern, creating minor inconsistency.

Tool Count2/5

64 tools is far beyond the well-scoped 3-15 range. Even for the broad npm registry API, this is excessive; an agent must parse many near-synonymous entries, and several groups (downloads variants, auth checks, team management) could be consolidated into fewer, more parameterized tools.

Completeness4/5

The server covers most of the npm registry domain: metadata, search, downloads, security, auth, teams, orgs, hooks, dist-tags, and unpublishing. The main gap is the absence of an actual npm_publish tool (only npm_publish_preflight exists), and token creation is deliberately omitted, so publishing workflows require a human handoff.

Maintenance

ActivityActive
ResponsivenessSlow

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    MCP server providing npm registry search, package details, dependency auditing, bundle size estimation, and package comparison tools for AI agents.
    5
    25 npm
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Grants AI agents real-time access to the NPM registry, enabling package metadata retrieval, version checks, and dependency auditing for up-to-date code generation.
    7 npm
    3
    -
  • A
    license
    B
    quality
    D
    maintenance
    Provides AI assistants with tools to check npm package versions and security heuristics, including version lookups, signal-based analysis, and batch analysis of package.json files.
    5
    6 npm
    AGPL 3.0