package-intel-mcp
Provides software supply-chain intelligence for npm packages, including metadata, version history, download counts, dependencies, health scores, and search.
Provides software supply-chain intelligence for PyPI packages, including metadata, version history, download counts, dependencies, health scores, and search.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@package-intel-mcpCheck the health and dependencies of the npm package jest"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Package Intel MCP — by Datakoot
Software supply-chain intelligence for AI agents — as MCP tools your agent can call mid-task, so it can vet a dependency before it installs it. Covers npm, PyPI and crates.io. No API keys.
Tools
Tool | What it does | Source |
| Metadata for a package: description, latest version, license, homepage & repo links | npm / PyPI / crates.io |
| Full version history with release dates | npm / PyPI / crates.io |
| Download counts and popularity signal | npm / PyPI / crates.io |
| Direct dependencies for a given version | deps.dev |
| Health signals: OpenSSF Scorecard, stars, dependents | deps.dev |
| Search for packages by keyword | npm / PyPI / crates.io |
Every tool accepts an ecosystem of npm, pypi, or crates. No API keys required.
Related MCP server: DepHealth MCP
Quick start
claude mcp add --transport http package-intel https://package.datakoot.com/mcpOr point any MCP client at https://package.datakoot.com/mcp.
Try it in 10 seconds — no key, no signup
Paste this into a terminal:
curl -s https://package.datakoot.com/mcp \
-H 'content-type: application/json' \
-H 'accept: application/json, text/event-stream' \
-d '{"jsonrpc": "2.0", "id": 1, "method": "tools/call", "params": {"name": "package_health", "arguments": {"ecosystem": "npm", "name": "express"}}}'You get a supply-chain health snapshot for the npm package express — versions, downloads, dependencies, maintenance signals — no API key, nothing to sign up for.
Or point any MCP client at the URL and just ask your agent, in plain language:
"How healthy is the npm package
express?""Before I add
left-pad, is it actively maintained and widely used?"
Data & attribution
Data comes from the public registry APIs for npm, PyPI and crates.io, plus deps.dev (Google Open Source Insights, CC-BY 4.0) for dependency graphs and OpenSSF Scorecard health signals. Package data is served from official public APIs and is informational.
Part of Datakoot — keyless intelligence APIs for AI agents.
Available Tools
6 toolspackage_dependenciesPackage DependenciesARead-onlyIdempotentInspect
List the direct dependencies of a specific package version (defaults to latest), via deps.dev. Lets an agent understand what a package pulls in before adding it. Ecosystems: npm, pypi, cargo.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Exact package name as published in that registry, e.g. express for npm, requests for pypi, serde for cargo. | |
| version | No | Optional; defaults to the latest/default version | |
| ecosystem | Yes | Package registry to look in. One of: npm, pypi, cargo. |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | No | |
| source | No | |
| version | No | |
| ecosystem | No | |
| provenance | No | Where this answer came from. served_at is when Datakoot answered (UTC); upstream lists the official sources consulted. Datakoot may serve a briefly cached copy, so the source's own observation can be older than served_at. |
| direct_dependencies | No | |
| dev_dependency_count | No | |
| build_dependency_count | No | |
| direct_dependency_count | No | |
| required_dependency_count | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, and the description adds genuinely new behavioral facts: results come from deps.dev, the scope is direct (not transitive) dependencies, and version defaults to latest. It omits rate limits and result shape, but the output schema covers the latter.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the core action before the rationale and supported ecosystems. Slightly redundant in re-listing 'npm, pypi, cargo' when the schema already enumerates them.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only lookup with rich annotations, full schema coverage, and an output schema, the description supplies everything needed to select and invoke it correctly: source, scope, default behavior, and supported ecosystems.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with clear per-parameter descriptions and an enum for ecosystem, so the baseline is 3. The description only restates the version default and lists the ecosystems, adding nothing the schema does not already provide.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb (List) plus precise resource and scope: direct dependencies of a specific package version, sourced from deps.dev. The 'direct' qualifier separates it in spirit from a transitive-dependency or package_info sibling, though no sibling is named explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a concrete use context – understanding what a package pulls in before adding it – which tells the agent when this tool is relevant. It stops short of naming alternatives (package_info, package_health) or stating 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.
package_downloadsPackage DownloadsARead-onlyIdempotentInspect
Get popularity/download statistics for a package (recent download counts). Useful for judging how widely used and battle-tested a dependency is. Ecosystems: npm, pypi, cargo.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Exact package name as published in that registry, e.g. express for npm, requests for pypi, serde for cargo. | |
| ecosystem | Yes | Package registry to look in. One of: npm, pypi, cargo. |
Output Schema
| Name | Required | Description |
|---|---|---|
| ecosystem | No | |
| last_month | No | |
| provenance | No | Where this answer came from. served_at is when Datakoot answered (UTC); upstream lists the official sources consulted. Datakoot may serve a briefly cached copy, so the source's own observation can be older than served_at. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, open-world and non-destructive, so the safety profile is covered. The description adds only the notion of 'recent' download counts, without specifying the time window, data source, or rate limits — modest added value beyond 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short, front-loaded sentences with no filler; the purpose comes first and the ecosystem scope is confined to a single closing clause.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present, return-value documentation is not required, and the description covers purpose, scope and the ecosystem boundary. It is slightly thin on the 'recent' semantics, which matters for interpreting the returned numbers.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and both parameters are documented in the schema with examples and an enum, so the description need not compensate. It confirms the three supported ecosystems but adds no naming or format guidance beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: retrieve popularity/download statistics for a package, with the qualifier 'recent download counts'. It implies separation from package_info/package_versions/package_health but never names or contrasts with any sibling, so differentiation is left to inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Useful for judging how widely used and battle-tested a dependency is' gives a clear decision context for choosing this tool, and the ecosystems list scopes it. It stops short of saying when to prefer it over package_health or package_info, or any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
package_healthPackage HealthARead-onlyIdempotentInspect
A composite trust/health check for a package an agent is considering: latest-release recency, deprecation status, license present, maintainer count, dependency count, and any known security advisories (via deps.dev). Returns a summary an agent can act on. Ecosystems: npm, pypi, cargo.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Exact package name as published in that registry, e.g. express for npm, requests for pypi, serde for cargo. | |
| ecosystem | Yes | Package registry to look in. One of: npm, pypi, cargo. |
Output Schema
| Name | Required | Description |
|---|---|---|
| license | No | |
| verdict | No | |
| concerns | No | |
| deprecated | No | |
| provenance | No | Where this answer came from. served_at is when Datakoot answered (UTC); upstream lists the official sources consulted. Datakoot may serve a briefly cached copy, so the source's own observation can be older than served_at. |
| repository | No | |
| has_license | No | |
| maintainers | No | |
| advisory_ids | No | |
| last_release | No | |
| latest_version | No | |
| known_advisories | No | |
| days_since_release | No | |
| actively_maintained | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so safety is covered. The description adds real behavioral context beyond that: the specific signals aggregated, the upstream data source (deps.dev), and that the result is an actionable summary. It stops short of noting latency/cost of a multi-source composite call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three tight sentences, front-loaded with the purpose and the checklist of signals. The closing 'Returns a summary an agent can act on' is slightly filler and contributes little given an output schema exists.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given an output schema exists, the description need not explain return values, and it covers scope, signals checked, source, and supported ecosystems. Only minor operational details (composite-call latency, no auth/rate-limit notes) are absent, which is low-stakes for a read-only public lookup.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% with only two parameters, and the schema already documents both the exact-name convention and the ecosystem enum. The description's ecosystem list ('npm, pypi, cargo') merely repeats the enum, adding no new meaning. Baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific resource (package) and verb-like scope (composite trust/health check), then enumerates exactly what is checked: recency, deprecation, license, maintainers, dependency count, advisories. The 'composite' framing and the six-signal list distinguish it from the single-facet siblings such as package_dependencies and package_info.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'A composite trust/health check for a package an agent is considering' gives a clear context for use (pre-adoption vetting). It does not, however, name any sibling alternative or state when a narrower tool like package_info or package_dependencies should be preferred instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
package_infoPackage InfoARead-onlyIdempotentInspect
Get core metadata for a package: latest version, description, license, homepage, source repository, maintainers, and whether it is deprecated. Use before an agent installs or recommends a dependency. Ecosystems: npm, pypi, cargo.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Package/crate name | |
| ecosystem | Yes | Package registry to look in. One of: npm, pypi, cargo. |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | No | |
| license | No | |
| version | No | |
| homepage | No | |
| ecosystem | No | |
| published | No | |
| deprecated | No | |
| provenance | No | Where this answer came from. served_at is when Datakoot answered (UTC); upstream lists the official sources consulted. Datakoot may serve a briefly cached copy, so the source's own observation can be older than served_at. |
| repository | No | |
| description | No | |
| maintainers | No | |
| version_count | No | |
| requires_python | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, open-world behavior, so the safety profile is fully covered. The description adds the deprecation flag and the cross-registry scope, but the field list largely duplicates what the output schema would document. With rich annotations and an output schema, the incremental behavioral disclosure is modest.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tightly written sentences: the payload is front-loaded, the ecology scope closes it out, and there is no redundant or filler text. Every clause carries information an agent needs to call the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read-only lookup with full schema coverage, rich annotations, and an output schema, this is essentially complete; the description needn't explain return values. The only omission is guidance pointing to sibling tools when the agent needs health, downloads, or dependency data instead.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so both parameters are already documented, and the enum constrains ecosystem. The description only restates the ecosystem list ('npm, pypi, cargo') and adds no format guidance for 'name' (e.g., scoped packages, case sensitivity). Baseline 3 applies when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get core metadata for a package') and enumerates the exact fields returned (version, description, license, homepage, repo, maintainers, deprecated flag), which implicitly separates it from siblings like package_downloads or package_dependencies. However, no sibling is named explicitly, so the agent must infer the boundary against package_health and package_versions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use before an agent installs or recommends a dependency' gives a clear, actionable trigger condition for when this tool applies. There are no exclusions or named alternatives (e.g., when to prefer package_health or package_versions), so the routing guidance stops short of the explicit when-not framing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
package_searchPackage SearchARead-onlyIdempotentInspect
Search for packages by keyword and get the top matches with descriptions. Supported ecosystems: npm and cargo (PyPI has no public search API).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results to return. | |
| query | Yes | Free-text search terms, matched against package names and descriptions. | |
| ecosystem | Yes | Package registry to look in. One of: npm, pypi, cargo. |
Output Schema
| Name | Required | Description |
|---|---|---|
| query | No | |
| results | No | |
| ecosystem | No | |
| provenance | No | Where this answer came from. served_at is when Datakoot answered (UTC); upstream lists the official sources consulted. Datakoot may serve a briefly cached copy, so the source's own observation can be older than served_at. |
| result_count | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint, so the safety profile is covered without the description. The description adds the ecosystem support boundary, but says nothing about result ranking, rate limits, or network/auth behavior expectations of a search call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no filler, and the capability statement is front-loaded before the ecosystem constraint. Every clause carries information an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be described, and the ecosystem limitation is disclosed. What remains thin is guidance on how keyword matching behaves or what to do when a search returns nothing, which is minor for a read-only search tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3. The description earns an extra point because the ecosystem sentence resolves a genuine inconsistency in the schema, whose enum lists only npm/cargo while its own property description claims "One of: npm, pypi, cargo." That clarification is real value beyond the structured fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ("Search for packages by keyword") and describes the result shape ("top matches with descriptions"), which cleanly separates it from siblings like package_info or package_versions. It does not explicitly name a sibling to differentiate against, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The ecosystem note gives real selection guidance: the tool only works for npm and cargo, and PyPI is excluded because it has no public search API. That is an implicit when-not condition, though no alternative tool is named for the cases this one cannot serve.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
package_versionsPackage VersionsARead-onlyIdempotentInspect
List recent released versions of a package with release dates (most recent first). Helps an agent pick a version or check how actively it is maintained. Ecosystems: npm, pypi, cargo.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Exact package name as published in that registry, e.g. express for npm, requests for pypi, serde for cargo. | |
| limit | No | Maximum number of results to return. | |
| ecosystem | Yes | Package registry to look in. One of: npm, pypi, cargo. |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | No | |
| latest | No | |
| versions | No | |
| ecosystem | No | |
| provenance | No | Where this answer came from. served_at is when Datakoot answered (UTC); upstream lists the official sources consulted. Datakoot may serve a briefly cached copy, so the source's own observation can be older than served_at. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered by structured data. The description adds useful behavioral context (result ordering, maintenance-check framing, supported ecosystems) but says nothing about pagination, truncation at the limit, or behavior for unknown packages.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the core action and scope, then usage rationale, then ecosystems. The ecosystem list is mildly redundant with the schema enum, but there is no padding or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
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 need not explain return values, and it correctly focuses on scope, ordering, and the maintenance-check use case. The only gap is the absence of any tie-breaker guidance against the five sibling package tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 all three parameters, including the enum values and the limit default. The description repeats the ecosystem list and does not add format or syntax detail beyond the schema, making the baseline 3 appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('List recent released versions of a package'), adds the sort order ('most recent first'), and names the result fields (release dates). It is clearly distinct from package_downloads or package_dependencies, though it does not explicitly contrast itself with sibling tools like package_info.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It offers implied usage ('pick a version or check how actively it is maintained'), which tells the agent the intent behind the call. However, there is no explicit when-to-use vs when-not guidance and no mention of alternatives such as package_info or package_health, so the agent must infer the boundary.
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.
6 tool updates
v2.1.0- First observed
package_dependencies - First observed
package_downloads - First observed
package_health - First observed
package_info - First observed
package_search - First observed
package_versions
TDQS
Scored across 6 tools
Each tool targets a distinct aspect of package intelligence (downloads, metadata, versions, dependencies, health, search), so selection is generally clear. There is mild overlap between package_info and package_health, since health reports a superset of info fields like license and deprecation, but the composite/actionable framing of health distinguishes it.
All six tools use a uniform package_<noun> snake_case pattern (package_info, package_versions, package_dependencies, etc.), making names highly predictable. No mixing of conventions or verb styles.
Six tools is well-scoped for a package-intelligence server, with each tool earning its place across popularity, metadata, versions, dependencies, health, and search. Nothing feels redundant or missing in size.
The surface covers a full evaluation lifecycle: discover (search), inspect (info, versions), assess risk (downloads, dependencies, health). Minor gap: package_search only works for npm and cargo, and there is no reverse-dependency or license-compatibility operation, but core workflows are covered.
Maintenance
Related MCP Connectors
Real-time Python package and vulnerability data for AI coding agents.
Provide AI-powered real-time analysis and intelligence on NPM packages, including security, depend…
CVE lookups (NVD) and dependency-manifest audits (OSV) for AI agents. No API keys.
CVE lookups (NVD) and dependency-manifest audits (OSV) for AI agents. No API keys.
Related MCP Servers
- AlicenseNot gradedqualityFmaintenanceOpen source intelligence for AI agents — GitHub project-health scoring, package dependency-risk analysis, trending repositories, license checks, and side-by-side package comparison.MIT
- AlicenseAqualityFmaintenanceDependency security & health auditing for AI agents with no account or API key required.22MIT
- AlicenseAqualityDmaintenancePackage intelligence for AI coding agents that checks npm and PyPI package health, deprecation, vulnerabilities, bundle size, and compares alternatives.5MIT
- AlicenseAqualityBmaintenanceVulnerability intelligence for AI agents that enables CVE lookup, package vulnerability checks, and dependency auditing without API keys.5MIT