A powerful Model Context Protocol (MCP) server that revolutionizes NPM package analysis through AI. Built to integrate with Claude and Anthropic AI, it provides real-time intelligence on package security, dependencies, and performance. This MCP server delivers instant insights and smart analysis to safeguard and optimize your npm ecosystem, making package management decisions faster and safer for modern development workflows.
- Version analysis and tracking
- Dependency analysis and mapping
- Advanced Security Scanning: Recursive dependency checks, ecosystem awareness (e.g., React), and accurate version resolution.
- Strict Input Validation & Batch Rate Control: Input sanitization via Zod against Path Traversal, SSRF, and Command Injection. Search queries (
npmSearch) are capped at 100 characters and filtered for control characters. Batch analysis tools enforce a strict cap of 25 packages per request to prevent registry enumeration DoS. - Smart SemVer Shorthand & Range Resolution: Transparently resolves major version shorthands, prefixes, and ranges (e.g.,
express@2,express@v4,zod@3.x,react@^18,lodash@~4.17) to the highest matching release without failing on missing exact version keys. - Indirect Prompt Injection Defense (OWASP LLM01): All tools returning raw 3rd-party Markdown/text (
npmPackageReadme,npmChangelogAnalysis) wrap untrusted content in<untrusted_external_content>tags, attach_meta.untrustedExternalContent = trueflags, and enforce strict tool schema warnings. - Package quality metrics
- Download trends and statistics
- TypeScript support verification
- Package size analysis
- Maintenance metrics
- Real-time package comparisons
- Standardized error handling and MCP response formats
- Efficient caching for improved performance and API rate limit management
- Rigorous schema validation and type safety using Zod
Note: The server provides AI-assisted analysis through MCP integration.
This server implements Defense-in-Depth controls aligned with OWASP LLM01:2025 (Indirect Prompt Injection):
- XML Data Demarcation: Content from external packages (
README.md, GitHub changelogs, release notes) is wrapped inside<untrusted_external_content source="..." package="..." type="...">tags so consuming LLM models distinguish untrusted data from instructions. - Metadata Signaling (
_meta): Responses include_meta.untrustedExternalContent = trueand_meta.sourcesarrays for programmatic client-side detection and policy enforcement. - Tool & Prompt Safety Warnings: Tool descriptions and prompt definitions explicitly instruct LLM agents to treat documentation as passive data and ignore embedded execution commands.
- Batch Size Capping & Query Sanitization: All 18 multi-package analysis tools enforce a 25-package limit per request (
PackageListSchema). Search queries are sanitized and capped at 100 characters (SearchQuerySchema). - Prototype Pollution Protection: Enforces
Object.hasOwn()checks on dictionary lookups (blocking reserved properties likeconstructorand__proto__).
To ensure data accuracy while maintaining performance, the server implements robust caching strategies:
- Automatic Invalidation: The cache is automatically invalidated whenever
pnpm-lock.yaml,package-lock.json, oryarn.lockchanges in your workspace. This ensures you always get fresh data after installing or updating dependencies. - Force Refresh: All tools accept an optional
ignoreCache: trueparameter to bypass the cache and force a fresh lookup from the registry.
When calling a tool, simply include ignoreCache: true in the arguments:
{
"name": "npmVersions",
"arguments": {
"packages": ["react"],
"ignoreCache": true
}
}This MCP server now supports both STDIO and HTTP streamable transport. Your existing STDIO configuration will continue to work without changes.
New capabilities:
- HTTP streamable transport via Smithery.ai
- Enhanced scalability and performance
- Interactive testing playground
Development commands:
# Compile TypeScript
pnpm run build
# Start STDIO server
pnpm run start
# Development server with playground
pnpm run devAdd this to your VS Code MCP config file. See VS Code MCP docs for more info.
{
"servers": {
"npm-sentinel": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@nekzus/mcp-server@latest"]
}
}
}This MCP server now supports HTTP streamable transport through Smithery.ai for enhanced scalability and performance. You can deploy it directly on Smithery.ai: Benefits of HTTP deployment:
- Scalable: Handles multiple concurrent connections
- Streamable: Real-time streaming responses
- Managed: Automatic deployment and monitoring
- Backward Compatible: Still supports STDIO for local development
- Interactive Testing: Built-in playground for testing tools
Configuration for Smithery.ai:
{
"mcpServers": {
"npm-sentinel": {
"type": "http",
"url": "https://smithery.ai/server/@Nekzus/npm-sentinel-mcp"
}
}
}The server supports the following configuration options:
| Environment Variable | CLI Argument | Default | Description |
|---|---|---|---|
NPM_REGISTRY_URL |
config.NPM_REGISTRY_URL |
https://registry.npmjs.org |
URL of the NPM registry to use for all requests |
When deploying via Smithery or Docker, you can configure these options in your configuration file:
{
"mcpServers": {
"npm-sentinel": {
"type": "http",
"url": "https://smithery.ai/server/@Nekzus/npm-sentinel-mcp",
"config": {
"NPM_REGISTRY_URL": "https://registry.npmjs.org"
}
}
}
}# Build the Docker image
docker build -t nekzus/npm-sentinel-mcp .You can run the MCP server using Docker with directory mounting to /projects:
{
"mcpServers": {
"npm-sentinel-mcp": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-w", "/projects",
"--mount", "type=bind,src=${PWD},dst=/projects",
"nekzus/npm-sentinel-mcp",
"node",
"dist/index.js"
]
}
}
}For multiple directories:
{
"mcpServers": {
"npm-sentinel-mcp": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-w", "/projects",
"--mount", "type=bind,src=/path/to/workspace,dst=/projects/workspace",
"--mount", "type=bind,src=/path/to/other/dir,dst=/projects/other/dir,ro",
"nekzus/npm-sentinel-mcp",
"node",
"dist/index.js"
]
}
}
}Note: All mounted directories must be under /projects for proper access.
Add this to your claude_desktop_config.json:
{
"mcpServers": {
"npmsentinel": {
"command": "npx",
"args": ["-y", "@nekzus/mcp-server@latest"]
}
}
}Configuration file locations:
- Windows:
%APPDATA%\Claude\claude_desktop_config.json - macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Linux: (Claude for Desktop does not officially support Linux at this time)
{
"mcpServers": {
"npm-sentinel-mcp": {
"command": "npx",
"args": [
"-y",
"@nekzus/mcp-server@latest"
]
}
}
}The server exposes its tools via the Model Context Protocol. All tools adhere to a standardized response format:
{
"content": [
{
"type": "text",
"text": "string",
"isError": boolean // Optional
}
// ... more content items if necessary
]
}npm://registry: NPM Registry interfacenpm://security: Security analysis interfacenpm://metrics: Package metrics interface
The server also provides the following informational resources accessible via MCP GetResource requests:
doc://server/readme:- Description: Retrieves the main
README.mdfile content for this NPM Sentinel MCP server. - MIME Type:
text/markdown
- Description: Retrieves the main
doc://mcp/specification:- Description: Retrieves the
llms-full.txtcontent, providing the comprehensive Model Context Protocol specification. - MIME Type:
text/plain
- Description: Retrieves the
- Get all versions of a package
- Input:
packages(string[]) - Returns: Version history with release dates
- Get latest version information
- Input:
packages(string[]) - Returns: Latest version details and changelog
- Analyze package dependencies
- Input:
packages(string[]) - Returns: Complete dependency tree analysis including direct dependencies and full transitive graph (count and explicit flatten list) mapping through deps.dev.
- Check TypeScript support
- Input:
packages(string[]) - Returns: TypeScript compatibility status
- Analyze package size
- Input:
packages(string[]) - Returns: Bundle size and import cost analysis
- Scan for security vulnerabilities
- Features:
- Instant Transitive Scanning: Powered by Google's
deps.devAPI to resolve massive dependency trees (e.g. Next.js, Astro) in a single request, bypassing deep recursion limitations. - Ecosystem Awareness: Automatically scans related packages efficiently.
- Rich Reports: Includes CVE IDs and full summaries from OSV.dev.
- Instant Transitive Scanning: Powered by Google's
- Input:
packages(string[]) - Returns: Detailed security advisories, CVEs, and severity ratings
- Get download trends
- Input:
packages(string[])period("last-week" | "last-month" | "last-year")
- Returns: Download statistics over time
- Compare multiple packages
- Input:
packages(string[]) - Returns: Detailed comparison metrics
- Get package maintainers
- Input:
packages(string[]) - Returns: Maintainer information and activity
- Get package quality score
- Input:
packages(string[]) - Returns: Comprehensive quality metrics, scoring details, and OpenSSF Scorecard.
- Get package README
- Input:
packages(string[]) - Returns: Formatted README content
- Search for packages
- Input:
query(string)limit(number, optional)
- Returns: Matching packages with metadata
- Check license compatibility
- Input:
packages(string[]) - Returns: License analysis and compatibility info
- Get repository statistics
- Input:
packages(string[]) - Returns: GitHub/repository metrics (stars, forks, open issues) along with OpenSSF Scorecard checks and scores via deps.dev.
- Check for deprecation
- Input:
packages(string[]) - Returns: Deprecation status and alternatives
- Analyze package changelogs
- Input:
packages(string[]) - Returns: Changelog summaries and impact analysis
- Find package alternatives
- Input:
packages(string[]) - Returns: Similar packages with comparisons
- Assess package quality
- Input:
packages(string[]) - Returns: Quality metrics and scores
- Check maintenance status
- Input:
packages(string[]) - Returns: Maintenance activity metrics
# Install dependencies
pnpm install
# Build TypeScript
pnpm run build
# Start the STDIO server
pnpm run start
# Development server
pnpm run devThis MCP server is licensed under the MIT License. This means you are free to use, modify, and distribute the software, subject to the terms and conditions of the MIT License. For more details, please see the LICENSE file in the project repository.
MIT © nekzus