Skip to main content
Glama

Gate a whole dependency list

check_dependencies
Read-onlyIdempotent

Verify npm or PyPI package names before writing dependency files, flagging hallucinated or risky packages with evidence-backed verdicts.

Instructions

Verify many npm or PyPI packages at once — use this before writing a package.json or requirements.txt, or handing a dependency list to a user. All names must belong to one ecosystem per call. Results are sorted worst-first so anything hallucinated or dangerous surfaces at the top. Read-only; batches registry requests and caches adoption figures, so 50 names take a few seconds.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
namesYesPackage names to verify (max 50), without version suffixes.
ecosystemNoRegistry to check against. Default npm.

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault
totalYes
resultsYesSorted worst-first.
blockingYesHow many results are HALLUCINATED or DANGER.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed5 schema fields changedv0.2.2
    • addedInput schema / properties / ecosystem
      Added value: +{
      +  "description": "Registry to check against. Default npm.",
      +  "enum": [
      +    "npm",
      +    "pypi"
      +  ],
      +  "type": "string"
      +}
    • changedInput schema / properties / names / description
      Previous value: -"Package names to verify (max 50)."New value: +"Package names to verify (max 50), without version suffixes."
    • addedInput schema / properties / names / items / maxLength
      Added value: +214
    • addedInput schema / properties / names / items / minLength
      Added value: +1
    • changedOutput schema / (root)
      Previous value: -nullNew value: +{
      +  "$schema": "http://json-schema.org/draft-07/schema#",
      +  "additionalProperties": false,
      +  "properties": {
      +    "blocking": {
      +      "description": "How many results are HALLUCINATED or DANGER.",
      +      "maximum": 9007199254740991,
      +      "minimum": -9007199254740991,
      +      "type": "integer"
      +    },
      +    "results": {
      +      "description": "Sorted worst-first.",
      +      "items": {
      +        "additionalProperties": {},
      +        "properties": {
      +          "ageDays": {
      +            "description": "Days since first publish.",
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "complete": {
      +            "description": "false when a check could not run (rate limit, outage); such a result is UNKNOWN unless already DANGER.",
      +            "type": "boolean"
      +          },
      +          "didYouMean": {
      +            "description": "For HALLUCINATED names: real packages with a similar name.",
      +            "items": {
      +              "additionalProperties": {},
      +              "properties": {
      +                "name": {
      +                  "type": "string"
      +                }
      +              },
      +              "required": [
      +                "name"
      +              ],
      +              "type": "object"
      +            },
      +            "type": "array"
      +          },
      +          "ecosystem": {
      +            "enum": [
      +              "npm",
      +              "pypi"
      +            ],
      +            "type": "string"
      +          },
      +          "exists": {
      +            "type": [
      +              "boolean",
      +              "null"
      +            ]
      +          },
      +          "name": {
      +            "type": "string"
      +          },
      +          "pointsTo": {
      +            "description": "The package this one's own deprecation notice tells users to install instead, if any.",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "repository": {
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "score": {
      +            "description": "0–100 risk score behind the verdict; null when the registry was unreachable.",
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          },
      +          "signals": {
      +            "items": {
      +              "additionalProperties": false,
      +              "properties": {
      +                "detail": {
      +                  "description": "One sentence of evidence, written for the agent to relay.",
      +                  "type": "string"
      +                },
      +                "id": {
      +                  "description": "Stable machine id, e.g. npm_security_placeholder, impersonates_popular_package, not_in_registry, incomplete_check.",
      +                  "type": "string"
      +                },
      +                "severity": {
      +                  "enum": [
      +                    "critical",
      +                    "high",
      +                    "medium",
      +                    "low",
      +                    "info"
      +                  ],
      +                  "type": "string"
      +                }
      +              },
      +              "required": [
      +                "id",
      +                "severity",
      +                "detail"
      +              ],
      +              "type": "object"
      +            },
      +            "type": "array"
      +          },
      +          "summary": {
      +            "description": "One-paragraph explanation with the suggested real package when there is one.",
      +            "type": "string"
      +          },
      +          "verdict": {
      +            "description": "HALLUCINATED: no such package. DANGER: do not install as-is. CAUTION: review first. UNKNOWN: could not verify — never treat as safe. SAFE: nothing found.",
      +            "enum": [
      +              "SAFE",
      +              "CAUTION",
      +              "DANGER",
      +              "HALLUCINATED",
      +              "UNKNOWN"
      +            ],
      +            "type": "string"
      +          },
      +          "version": {
      +            "description": "Latest published version.",
      +            "type": [
      +              "string",
      +              "null"
      +            ]
      +          },
      +          "weeklyDownloads": {
      +            "type": [
      +              "number",
      +              "null"
      +            ]
      +          }
      +        },
      +        "required": [
      +          "name",
      +          "ecosystem",
      +          "verdict",
      +          "summary",
      +          "signals"
      +        ],
      +        "type": "object"
      +      },
      +      "type": "array"
      +    },
      +    "total": {
      +      "maximum": 9007199254740991,
      +      "minimum": -9007199254740991,
      +      "type": "integer"
      +    }
      +  },
      +  "required": [
      +    "blocking",
      +    "total",
      +    "results"
      +  ],
      +  "type": "object"
      +}
  2. First observedv0.1.1

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, destructiveHint=false, so the safety profile is clear. The description adds useful behavioral context: it mentions sorting results worst-first, batching registry requests, and caching adoption figures, which gives an agent insight into performance and output ordering. Also notes 'Read-only' which aligns with annotations. No contradiction. Slight deduction for not specifying exact output structure, but output schema is present.

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 structured, with key information front-loaded: purpose, usage timing, ecosystem constraint, read-only status, and performance caching. Each sentence adds value without redundancy. It is efficient and well-organized.

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 complexity, the description covers usage scenarios, constraints, and performance expectations. The output schema provides return details, so the description does not need to elaborate. The annotation set is rich, and the description complements it well, making it complete for an agent to decide when and how to invoke.

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 both parameters are documented in the schema. The description adds minimal extra beyond the schema: it clarifies that names are without version suffixes and that ecosystem must be uniform, but these are implied in the schema descriptions. Since coverage is high, 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?

States a specific verb ('Verify') and resource ('many npm or PyPI packages at once'), and clearly distinguishes from siblings by focusing on batch verification. The mention of 'gate a whole dependency list' adds clarity about the intended use case. It contrasts with check_package (likely single) and check_install_command (likely command-level).

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 states when to use it: 'before writing a package.json or requirements.txt, or handing a dependency list to a user.' Provides a constraint: 'All names must belong to one ecosystem per call.' Implicitly contrasts with alternatives by focusing on batched verification and noting it batches registry requests.

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