Skip to main content
Glama

Check an npm package for maintainer/ownership red flags

check_maintainer_changes
Read-only

Reconstruct who has controlled an npm package and when, straight from the packument (each version records the maintainer list at publish time and who ran npm publish). Use it for the 'who controls this package, and did that change recently' question; use get_package/check_package_provenance for general health and publish integrity.

Flags:

  1. a maintainer added recently who then published soon after, on a package with real prior history — the takeover shape behind ua-parser-js, event-stream and the 2025 chalk/debug ('qix') compromise

  2. the whole maintainer list replaced at once

  3. a long-standing maintainer quietly dropped

  4. a maintainer change on npm AFTER the latest release — more urgent: access changed hands but nothing has shipped yet

It also checks the declared GitHub repository: transferred or renamed (repository.ownerLogin/ownerAvatarUrl show the CURRENT owner), unreachable, or a latest release that landed long after any real push activity. If it flags a newly added or fully replaced maintainer, follow up with check_maintainer_blast_radius on that username to see whether the same account touched other packages at the same time. Findings are signals to verify, not proof of compromise.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
nameYesExact npm package name, e.g. "lodash" or "@scope/name"

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
nameYes
historyYes
findingsYes
riskTierYes
npmscanUrlYes
repositoryYes
totalScoreYes
lookbackDaysYes
currentMaintainersYes

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed3 schema fields changed
    • addedOutput schema / properties / repository / properties / ownerAvatarUrl
      Added value: +{
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • addedOutput schema / properties / repository / properties / ownerLogin
      Added value: +{
      +  "type": [
      +    "string",
      +    "null"
      +  ]
      +}
    • changedOutput schema / properties / repository / required
      Previous value: -[
      -  "checked",
      -  "declaredRepository",
      -  "currentFullName",
      -  "transferred",
      -  "archived",
      -  "reachable",
      -  "note"
      -]New value: +[
      +  "checked",
      +  "declaredRepository",
      +  "currentFullName",
      +  "transferred",
      +  "archived",
      +  "reachable",
      +  "ownerLogin",
      +  "ownerAvatarUrl",
      +  "note"
      +]
  2. Added

TDQS

A4.6/5.0
Behavior5/5

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

Annotations already cover the read-only, non-destructive, open-world profile, but the description goes well beyond them: it enumerates the four specific red-flag patterns, explains why the post-release change case is more urgent, covers the GitHub repository checks, and honestly caveats that findings are 'signals to verify, not proof of compromise'.

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?

Front-loaded with purpose and routing in the first two sentences, then a numbered flag list that is genuinely informative rather than padding. It is on the long side for a single-parameter tool, but each section (flags, repo checks, follow-up, caveat) 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?

With an output schema present, the description needn't explain return values, and it doesn't try. Given the open-world security domain and the ambiguity of the findings, the description supplies exactly the framing an agent needs: what signals mean, how to chain tools, and the verification caveat.

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?

Only one parameter and schema coverage is 100%, so the schema already carries the name format and constraints. The description adds the data-source context (packument) but no additional syntax or edge-case meaning for the parameter itself; 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?

States a specific verb ('Reconstruct who has controlled an npm package and when') and the exact data source (the packument, per-version maintainer lists). It explicitly separates itself from siblings get_package and check_package_provenance by naming the question it answers ('who controls this package, and did that change recently').

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?

Gives an explicit when-to-use framing ('the who controls this package, and did that change recently question') and names the alternatives for the adjacent questions (get_package, check_package_provenance). It also prescribes a concrete follow-up workflow with check_maintainer_blast_radius when a maintainer flag fires.

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

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.

Resources