Skip to main content
Glama

npm-context-agent-mcp

A Model Context Protocol (MCP) server that provides comprehensive contextual information about npm packages, including README files, versions, dependencies, download statistics, and more.

šŸš€ Features

Core Capabilities

  • šŸ“¦ Package Metadata - Get detailed information about any npm package

  • šŸ“– README Files - Automatically fetches README from GitHub repositories with smart branch fallback

  • šŸ” Package Search - Search npm registry by keyword with customizable result limits

  • šŸ“‹ Version History - Get all available versions of a package with dist tags

  • šŸ”— Dependencies Info - View dependencies, devDependencies, and peerDependencies

  • šŸ“Š Download Statistics - Track package download trends (last day, week, or month)

  • ā„¹ļø Comprehensive Info - Get full package metadata including keywords, license, maintainers

  • šŸ”€ Package Comparison - Compare two packages side-by-side

  • šŸ“¦ Bundle Size - Get package bundle size information from bundlephobia

  • ⭐ Quality Metrics - Get quality scores from npms.io

MCP Resources

Resources provide application-driven data access:

  • package://{packageName} - Package metadata as JSON resource

  • package://{packageName}/readme - README content as markdown resource

  • package://{packageName}/dependencies - Dependencies as JSON resource

  • package://{packageName}/versions - Version history as JSON resource

MCP Prompts

Ready-to-use prompt templates:

  • analyze-package - Comprehensive package analysis prompt

  • compare-packages - Compare two packages prompt

  • find-alternatives - Find alternative packages prompt

Transport Support

  • stdio Transport - Traditional stdio-based communication (default)

  • HTTP Transport - HTTP-based communication for remote access

  • Dual Mode - Support both transports simultaneously

Technical Features

  • šŸ›”ļø Type-safe validation - Uses Zod for runtime schema validation

  • šŸ·ļø Scoped package support - Handles scoped packages like @types/node

  • šŸŽÆ Version support - Fetch specific package versions for all operations

  • ⚔ Smart branch fallback - Automatically tries main → master → default branches

  • šŸ”„ Error handling - Graceful error handling with detailed error messages

  • šŸ“¤ Structured output - All tools return structured JSON for programmatic access

  • šŸŽØ Modern MCP SDK - Uses latest MCP SDK v1.20.2 with resources and prompts

  • 🌐 HTTP & stdio - Choose your transport mode based on your needs

šŸ“‹ Requirements

  • Node.js 18+ (works with Node.js 20+ recommended)

  • pnpm 10.19.0+

šŸ› ļø Installation

From npm (when published)

npm install -g npm-context-agent-mcp

From source

git clone <repository-url> cd npm-context-agent-mcp pnpm install pnpm build

šŸŽÆ Usage

As an MCP Server

This server implements the Model Context Protocol and can be used with MCP-compatible clients.

Stdio Transport (Default)

Add to your MCP configuration:

{ "mcpServers": { "npm-context-agent": { "command": "node", "args": ["path/to/npm-context-agent-mcp/build/index.js"] } } }

HTTP Transport

To use HTTP transport, set the environment variable before starting:

export TRANSPORT_MODE=http export PORT=3000 # optional, defaults to 3000 node build/index.js

Then connect to http://localhost:3000/mcp from your MCP client.

Dual Mode

To run both stdio and HTTP transports simultaneously:

export TRANSPORT_MODE=both node build/index.js

Environment Variables:

  • TRANSPORT_MODE - Transport mode: stdio (default), http, or both

  • PORT - HTTP server port (default: 3000, only used for http/both modes)

Quick Start Examples

Tools:

Get README for a package:

{ "packageName": "react" }

Search for packages:

{ "query": "state management", "limit": 5 }

Get all versions:

{ "packageName": "svelte" }

Get dependencies:

{ "packageName": "@types/node", "version": "24.0.0" }

Check download stats:

{ "packageName": "lodash", "period": "last-week" }

Compare packages:

{ "packageName1": "express", "packageName2": "fastify" }

Get bundle size:

{ "packageName": "lodash", "version": "4.17.21" }

Get quality metrics:

{ "packageName": "react" }

Resources:

Read package metadata:

package://react

Read package README:

package://react/readme

Read package dependencies:

package://react/dependencies

Read version history:

package://react/versions

Prompts:

Analyze a package:

{ "packageName": "express" }

Compare two packages:

{ "packageName1": "vue", "packageName2": "react" }

Find alternatives:

{ "packageName": "lodash", "useCase": "utility functions" }

Available Tools

Tool

Description

Parameters

get_readme_data

Get package README from GitHub

packageName

,

version?

search_packages

Search npm packages by keyword

query

,

limit?

get_package_versions

Get all versions of a package

packageName

get_package_dependencies

Get package dependencies

packageName

,

version?

get_download_stats

Get download statistics

packageName

,

period?

get_package_info

Get comprehensive package info

packageName

,

version?

compare_packages

Compare two packages side-by-side

packageName1

,

packageName2

get_package_size

Get bundle size information

packageName

,

version?

get_package_quality

Get quality metrics from npms.io

packageName

get_readme_data

Retrieves package information and README content from npm packages.

Parameters:

  • packageName (string, required): The name of the npm package

  • version (string, optional): Specific version to fetch (defaults to latest)

Example:

{ "packageName": "zustand", "version": "5.0.0" }

Response: Returns package name, version, description, repository URL, and README content.


search_packages

Search npm registry for packages by keyword.

Parameters:

  • query (string, required): Search keyword

  • limit (number, optional): Maximum number of results (default: 20)

Example:

{ "query": "state management", "limit": 10 }

Response: Returns matching packages with names, versions, descriptions, authors, and links.


get_package_versions

Get all available versions of a package.

Parameters:

  • packageName (string, required): The name of the npm package

Example:

{ "packageName": "react" }

Response: Returns list of all versions, dist tags, and latest version.


get_package_dependencies

Get dependencies and devDependencies for a package.

Parameters:

  • packageName (string, required): The name of the npm package

  • version (string, optional): Specific version to fetch (defaults to latest)

Example:

{ "packageName": "@types/node", "version": "24.0.0" }

Response: Returns dependencies, devDependencies, and peerDependencies for the specified version.


get_download_stats

Get download statistics from npm.

Parameters:

  • packageName (string, required): The name of the npm package

  • period (string, optional): Time period - "last-day", "last-week", or "last-month" (default: "last-month")

Example:

{ "packageName": "lodash", "period": "last-week" }

Response: Returns download counts and date range for the specified period.


get_package_info

Get comprehensive package metadata.

Parameters:

  • packageName (string, required): The name of the npm package

  • version (string, optional): Specific version to fetch (defaults to all versions)

Example:

{ "packageName": "express", "version": "4.18.0" }

Response: Returns comprehensive package information including keywords, license, maintainers, and repository details.


compare_packages

Compare two packages side-by-side with detailed metrics.

Parameters:

  • packageName1 (string, required): First package to compare

  • packageName2 (string, required): Second package to compare

Example:

{ "packageName1": "express", "packageName2": "fastify" }

Response: Returns side-by-side comparison including versions, descriptions, download statistics, maintainers, and keywords.


get_package_size

Get bundle size information for a package from bundlephobia.

Parameters:

  • packageName (string, required): The name of the npm package

  • version (string, optional): Specific version to check (defaults to latest)

Example:

{ "packageName": "lodash", "version": "4.17.21" }

Response: Returns minified size, gzipped size, and dependency count.


get_package_quality

Get quality metrics from npms.io for a package.

Parameters:

  • packageName (string, required): The name of the npm package

Example:

{ "packageName": "react" }

Response: Returns quality score, popularity score, and maintenance score.


Available Resources

Resource

Description

MIME Type

package://{packageName}

Package metadata

application/json

package://{packageName}/readme

Package README content

text/markdown

package://{packageName}/dependencies

Package dependencies

application/json

package://{packageName}/versions

Package version history

application/json

Available Prompts

Prompt

Description

Arguments

analyze-package

Comprehensive package analysis

packageName

compare-packages

Compare two packages

packageName1

,

packageName2

find-alternatives

Find alternative packages

packageName

,

useCase?


šŸ—ļø Development

Project Structure

npm-context-agent-mcp/ ā”œā”€ā”€ src/ │ └── index.ts # Main MCP server implementation ā”œā”€ā”€ build/ # Compiled JavaScript output ā”œā”€ā”€ package.json ā”œā”€ā”€ tsconfig.json └── README.md

Scripts

  • pnpm build - Compile TypeScript to JavaScript

  • pnpm inspect - Run MCP inspector for testing

Building

pnpm build

The build process compiles TypeScript and makes the output executable.

Testing with MCP Inspector

pnpm inspect

This runs the MCP inspector which allows you to test the server interactively.

šŸ›ļø Architecture

MCP Server Implementation

The server uses the @modelcontextprotocol/sdk v1.20.2 to create a standardized MCP server that:

  1. Fetches package metadata from various npm APIs

  2. Validates all responses using Zod schemas

  3. For README fetching: Extracts the GitHub repository URL and fetches README with branch fallback

  4. Returns formatted, structured data with both text and JSON output

  5. Supports Resources for application-driven data access

  6. Supports Prompts for reusable analysis templates

  7. Provides multiple transport options (stdio, HTTP, or both)

API Endpoints Used

  • npm Registry API: https://registry.npmjs.org/ - Package metadata, versions, dependencies

  • npm Search API: https://registry.npmjs.org/-/v1/search - Package search functionality

  • npm Downloads API: https://api.npmjs.org/downloads/point/ - Download statistics

  • GitHub Raw Content: https://raw.githubusercontent.com/ - README file fetching

  • Bundlephobia API: https://bundlephobia.com/api/size - Bundle size information

  • npms.io API: https://api.npms.io/v2/package/ - Quality metrics

Data Flow

Client Request → MCP Server → Multiple APIs (npm, bundlephobia, npms.io, GitHub) ↓ Validation (Zod) ↓ Structured Response (Text + JSON)

Error Handling

The server implements comprehensive error handling:

  • HTTP errors from all APIs (npm registry, bundlephobia, npms.io, GitHub)

  • Invalid response structures

  • GitHub README fetch failures with branch fallback

  • Network errors and timeouts

  • Scoped package handling

  • Missing package or version errors

All errors are returned with descriptive messages and proper error flags in both text and structured formats.

README Fetching with Branch Fallback

The server intelligently fetches README files by trying multiple branches in order:

  1. Try main branch

  2. Try master branch

  3. Try default branch (no branch specification)

This ensures maximum compatibility across different repository configurations.

šŸ”’ Type Safety

The project uses Zod for runtime validation across all tools:

const NpmRegistryResponseSchema = z.object({ name: z.string(), version: z.string(), description: z.string().optional(), repository: z.object({ type: z.string(), url: z.string(), }), });

This ensures type safety and prevents runtime errors from unexpected API responses across all API endpoints.

šŸ“¦ Dependencies

  • @modelcontextprotocol/sdk - MCP SDK for server implementation

  • zod - Runtime type validation

  • express - HTTP server for HTTP transport mode

šŸ“¦ Supported Package Types

This server can query any npm package. Here are examples:

  • Regular packages: lodash, express, react

  • Scoped packages: @types/node, @babel/core, @angular/core

  • Specific versions: All tools support optional version parameters

šŸ“ Version History

Version 2.0.0 (Current)

Major Update - MCP SDK modernization and new features

New Features:

  • āœ… MCP Resources support (4 resources)

  • āœ… MCP Prompts support (3 prompts)

  • āœ… HTTP transport mode

  • āœ… Dual transport mode (stdio + HTTP)

  • āœ… Package comparison tool

  • āœ… Bundle size tool (bundlephobia integration)

  • āœ… Quality metrics (npms.io integration)

  • āœ… Structured output for all tools

  • āœ… Modern SDK v1.20.2 with registerTool/Resource/Prompt APIs

Improvements:

  • āœ… All tools migrated to registerTool() API

  • āœ… All tools return structured content

  • āœ… Better error handling and type safety

  • āœ… Enhanced documentation

Note:

  • Removed security checking tool due to unavailable public API for vulnerability data

Version 1.0.0

Initial Release - Complete npm context agent MCP server

Features:

  • āœ… README fetching with branch fallback

  • āœ… Package search functionality

  • āœ… Version history retrieval

  • āœ… Dependencies analysis

  • āœ… Download statistics

  • āœ… Comprehensive package info

  • āœ… Scoped package support

  • āœ… Version-specific queries

  • āœ… Zod schema validation

  • āœ… Comprehensive error handling

šŸ¤ Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

šŸ“„ License

MIT License

Copyright (c) 2025 Juan Sebastian Gonzalez

See LICENSE.md for full license text.

šŸ™ Acknowledgments

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/JuanSebastianGB/npm-context-agent-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server