jaegis-npm-mcp-server
Version:
NPM Package Management MCP Server with 10 production-ready tools including complete 5-step security pipeline
588 lines (487 loc) • 14.8 kB
Markdown
# jaegis-npm-mcp-server
> NPM package management with 10 production-ready tools including complete 5-step security pipeline
[](https://www.npmjs.com/package/jaegis-npm-mcp-server)
[](https://nodejs.org/)
[](https://modelcontextprotocol.io/)
[](LICENSE)
## 🚀 Quick Start
### NPX (Recommended)
```bash
# List all available tools
npx jaegis-npm-mcp-server@latest --list-tools --format=table
# Get tools schema for MCP integration
npx jaegis-npm-mcp-server@latest --tools-json
# Start the MCP server
npx jaegis-npm-mcp-server@latest
```
### Global Installation
```bash
npm install -g jaegis-npm-mcp-server
npm-mcp-server --list-tools
```
## 📦 Tool Inventory (10 Tools)
| Tool Name | Category | Description | Required Params | Optional Params |
|-----------|----------|-------------|-----------------|-----------------|
| `npm_package_info` | Package Information | Get detailed package metadata and dependencies | 1 | 1 |
| `npm_search_packages` | Package Discovery | Search NPM registry using keywords | 1 | 1 |
| `npm_publish_package` | Package Publishing | Publish packages to NPM registry | 1 | 2 |
| `npm_unpublish_package` | Package Management | Remove packages from NPM (irreversible) | 1 | 1 |
| `npm_deprecate_package` | Package Management | Deprecate package versions with message | 3 | 0 |
| `npm_list_versions` | Package Information | List all available package versions | 1 | 0 |
| `npm_download_stats` | Package Analytics | Get download statistics and analytics | 1 | 1 |
| `npm_validate_package` | Package Validation | Validate package.json for publishing | 1 | 0 |
| `security_check` | Security | Scan project for exposed credentials and secrets | 1 | 0 |
| `health_check` | Diagnostics | Server health, version, uptime, and dependency status | 0 | 0 |
### Tool Categories
- **Package Information** (2 tools) - Retrieve package metadata and versions
- **Package Discovery** (1 tool) - Search and explore NPM registry
- **Package Publishing** (1 tool) - Publish packages to NPM
- **Package Management** (2 tools) - Unpublish and deprecate packages
- **Package Analytics** (1 tool) - Download statistics and metrics
- **Package Validation** (1 tool) - Validate package configuration
- **Security** (1 tool) - Security scanning and credential detection
- **Diagnostics** (1 tool) - Server health and status
## 🔧 Environment Setup
### Required Variables
```bash
export NPM_TOKEN=npm_your_token_here # NPM access token
export NPM_USERNAME=your_npm_username # NPM username
export NPM_EMAIL=your_email@example.com # NPM email
```
### Optional Variables
```bash
export NPM_REGISTRY=https://registry.npmjs.org/ # NPM registry URL
export DEFAULT_PACKAGE=JAEGIS-web-os # Default package name
```
### Generate NPM Token
1. Go to [NPM Settings > Tokens](https://www.npmjs.com/settings/tokens)
2. Click "Generate New Token"
3. Select "Automation" for CI/CD or "Publish" for manual publishing
4. Copy the generated token (format: `npm_*`)
### Token Format Validation
- ✅ `npm_*` - NPM access token
- ❌ Other formats will show warnings
## 🎯 MCP Client Integration
### Augment Code
```json
{
"npm-jaegis": {
"command": "npx",
"args": ["@jaegis/npm-mcp-server@latest"],
"env": {
"NPM_TOKEN": "npm_your_token_here",
"NPM_USERNAME": "your_username",
"NPM_EMAIL": "your_email@example.com"
}
}
}
```
### Claude Desktop
```json
{
"mcpServers": {
"npm-jaegis": {
"command": "npx",
"args": ["@jaegis/npm-mcp-server@latest"],
"env": {
"NPM_TOKEN": "npm_your_token_here",
"NPM_USERNAME": "your_username",
"NPM_EMAIL": "your_email@example.com"
}
}
}
}
```
### VS Code MCP Extension
```json
{
"name": "NPM JAEGIS",
"command": "npx @jaegis/npm-mcp-server@latest",
"env": {
"NPM_TOKEN": "npm_your_token_here",
"NPM_USERNAME": "your_username"
}
}
```
## 📖 Complete Tool Reference
### 1. npm_package_info
Get detailed information about an NPM package including metadata, dependencies, and download statistics.
**Parameters:**
- `package_name` (required): Name of the NPM package
- `version` (optional): Specific version (defaults to latest)
**Example:**
```json
{
"tool": "npm_package_info",
"parameters": {
"package_name": "express",
"version": "4.18.0"
}
}
```
**Response:**
```json
{
"name": "express",
"version": "4.18.0",
"description": "Fast, unopinionated, minimalist web framework",
"author": "TJ Holowaychuk",
"license": "MIT",
"dependencies": { ... },
"downloads": 25000000,
"lastPublished": "2022-04-29T00:00:00.000Z",
"success": true
}
```
### 2. npm_search_packages
Search for NPM packages using keywords and filters.
**Parameters:**
- `query` (required): Search query
- `limit` (optional): Maximum number of results (default: 20, max: 100)
**Example:**
```json
{
"tool": "npm_search_packages",
"parameters": {
"query": "web framework",
"limit": 10
}
}
```
### 3. npm_list_versions
List all available versions of a package with release information.
**Parameters:**
- `package_name` (required): Name of the package
**Example:**
```json
{
"tool": "npm_list_versions",
"parameters": {
"package_name": "react"
}
}
```
**Response:**
```json
{
"package": "react",
"totalVersions": 150,
"versions": ["18.2.0", "18.1.0", "18.0.0", ...],
"latest": "18.2.0",
"success": true
}
```
### 4. npm_download_stats
Get download statistics and analytics for a package.
**Parameters:**
- `package_name` (required): Name of the package
- `period` (optional): Time period - `last-day`, `last-week`, `last-month`, `last-year` (default: last-month)
**Example:**
```json
{
"tool": "npm_download_stats",
"parameters": {
"package_name": "lodash",
"period": "last-month"
}
}
```
**Response:**
```json
{
"package": "lodash",
"period": "last-month",
"downloads": 50000000,
"start": "2025-09-23",
"end": "2025-10-23",
"success": true
}
```
### 5. npm_validate_package
Validate package.json and check for publishing readiness.
**Parameters:**
- `package_path` (required): Path to package directory
**Example:**
```json
{
"tool": "npm_validate_package",
"parameters": {
"package_path": "/path/to/my-package"
}
}
```
**Response:**
```json
{
"package": "my-package",
"version": "1.0.0",
"isValid": true,
"issues": [],
"warnings": "Package is ready to publish",
"success": true
}
```
### 6. npm_publish_package
Validate and prepare a package for publishing to NPM registry.
**Parameters:**
- `package_path` (required): Path to package directory
- `tag` (optional): Distribution tag (default: latest)
- `access` (optional): Package access level - `public` or `restricted` (default: public)
**Example:**
```json
{
"tool": "npm_publish_package",
"parameters": {
"package_path": "/path/to/my-package",
"tag": "latest",
"access": "public"
}
}
```
### 7. npm_deprecate_package
Deprecate a package version with a custom message.
**Parameters:**
- `package_name` (required): Name of the package
- `version` (required): Version range to deprecate
- `message` (required): Deprecation message
**Example:**
```json
{
"tool": "npm_deprecate_package",
"parameters": {
"package_name": "old-package",
"version": "1.0.0",
"message": "This version has security vulnerabilities. Please upgrade to 2.0.0"
}
}
```
### 8. npm_unpublish_package
Unpublish a package version from NPM registry (irreversible operation).
**Parameters:**
- `package_name` (required): Name of the package
- `version` (optional): Specific version to unpublish (unpublishes entire package if not specified)
**Example:**
```json
{
"tool": "npm_unpublish_package",
"parameters": {
"package_name": "my-package",
"version": "1.0.0"
}
}
```
## 📖 Usage Examples
### Package Information
```javascript
// Get package information
{
"tool": "npm_package_info",
"parameters": {
"package_name": "JAEGIS-web-os",
"version": "latest"
}
}
// List all versions
{
"tool": "npm_list_versions",
"parameters": {
"package_name": "JAEGIS-web-os"
}
}
```
### Package Publishing
```javascript
// Publish a package
{
"tool": "npm_publish_package",
"parameters": {
"package_path": "/path/to/package",
"tag": "latest",
"access": "public"
}
}
// Validate before publishing
{
"tool": "npm_validate_package",
"parameters": {
"package_path": "/path/to/package"
}
}
```
### Package Management
```javascript
// Deprecate a version
{
"tool": "npm_deprecate_package",
"parameters": {
"package_name": "JAEGIS-web-os",
"version": "1.0.0",
"message": "This version has security vulnerabilities"
}
}
// Get download statistics
{
"tool": "npm_download_stats",
"parameters": {
"package_name": "JAEGIS-web-os",
"period": "last-month"
}
}
```
### Package Discovery
```javascript
// Search packages
{
"tool": "npm_search_packages",
"parameters": {
"query": "jaegis web os",
"limit": 10
}
}
```
## 🛠️ Command Line Options
```bash
npm-mcp-server [OPTIONS]
OPTIONS:
--list-tools List all available tools with descriptions
--tools-json Output complete MCP tools schema as JSON
--format=table Use table format for tool listings (default: JSON)
--help, -h Show this help message
EXAMPLES:
npm-mcp-server --list-tools --format=table
npm-mcp-server --tools-json > tools-schema.json
npm-mcp-server # Start MCP server
```
## 🔒 Security Features
- ✅ **Credential Sanitization** - NPM tokens masked in logs (shows only first/last 4 chars)
- ✅ **Environment-based Authentication** - No hardcoded credentials in source code
- ✅ **Token Format Validation** - Validates NPM token formats (npm_* prefix)
- ✅ **Registry Configuration** - Configurable NPM registry URLs
- ✅ **Error Handling** - Comprehensive error messages without credential exposure
- ✅ **Portable Configuration** - No hardcoded paths, works from any directory
- ✅ **Secure Environment Loading** - Cascade loading from HOME/.mcp/.env
### Security Best Practices
1. **Never commit credentials to version control**
```bash
# Add to .gitignore
.env
.env.local
.env.*.local
```
2. **Use environment variables for sensitive data**
```bash
export NPM_TOKEN=npm_your_token_here
export NPM_USERNAME=your_username
export NPM_EMAIL=your_email@example.com
```
3. **Rotate tokens regularly**
- Visit https://www.npmjs.com/settings/tokens
- Generate new tokens periodically
- Revoke old tokens
4. **Use token scopes appropriately**
- **Automation**: For CI/CD pipelines
- **Publish**: For manual publishing
- **Read-only**: For package information queries
5. **Verify package ownership before publishing**
- Ensure you own the package name
- Check for typosquatting attempts
- Use 2FA on NPM account
## 🚨 Troubleshooting
### Common Issues and Solutions
**"NPM token is required"**
```bash
# Set your NPM token
export NPM_TOKEN=npm_your_token_here
export NPM_USERNAME=your_username
export NPM_EMAIL=your_email@example.com
# Verify it's set
echo $NPM_TOKEN
```
**"Package not found"**
- Check package name spelling (case-sensitive)
- Verify package exists on NPM registry: https://www.npmjs.com/package/package-name
- Ensure token has access to private packages
- Try searching first: `npm_search_packages` with the package name
**"Permission denied" when publishing**
- Verify token has publish permissions
- Check package ownership: `npm owner ls package-name`
- Ensure token is not expired
- Verify you're publishing to the correct registry
- Check if package name is already taken
**"Package validation failed"**
- Check package.json syntax (valid JSON)
- Verify required fields: `name`, `version`
- Ensure version follows semver format (e.g., 1.0.0)
- Validate dependencies are valid package names
- Check for circular dependencies
**"Invalid version format"**
- Version must follow semantic versioning: MAJOR.MINOR.PATCH
- Examples: 1.0.0, 2.1.3, 0.0.1
- Pre-release versions: 1.0.0-alpha, 1.0.0-beta.1
- Build metadata: 1.0.0+build.123
**"Connection timeout"**
- Check internet connection
- Verify NPM registry is accessible
- Try using a different registry: `NPM_REGISTRY=https://registry.npmjs.org/`
- Check firewall/proxy settings
**"Tool returns empty results"**
- Verify package name is correct
- Check if package has been published
- Ensure you're using the correct registry
- Try with a popular package first (e.g., "react", "lodash")
### Debug Mode
```bash
# Enable verbose logging
DEBUG=npm-mcp-server npm-mcp-server
# Check server health
npx jaegis-npm-mcp-server@latest --list-tools
# Validate your setup
npx jaegis-npm-mcp-server@latest --tools-json
```
### Getting Help
1. **Check the logs** - Look for error messages in stderr
2. **Verify credentials** - Ensure NPM_TOKEN, NPM_USERNAME, NPM_EMAIL are set
3. **Test connectivity** - Try accessing NPM registry directly
4. **Check package.json** - Validate syntax and required fields
5. **Review examples** - See usage examples in this README
### Reporting Issues
If you encounter issues:
1. Collect error messages and logs
2. Note the tool name and parameters used
3. Include your Node.js version: `node --version`
4. Include package version: `npm list jaegis-npm-mcp-server`
5. Report on NPM: https://www.npmjs.com/package/jaegis-npm-mcp-server
## 📦 Package Information
- **Package**: jaegis-npm-mcp-server
- **Version**: 1.1.5
- **Node.js**: >=18.0.0
- **License**: MIT
- **NPM**: [npmjs.com/package/jaegis-npm-mcp-server](https://www.npmjs.com/package/jaegis-npm-mcp-server)
- **Tools**: 10 production-ready tools with complete security infrastructure
### Installation
```bash
# Via NPX (recommended)
npx jaegis-npm-mcp-server@latest
# Via NPM
npm install -g jaegis-npm-mcp-server
npm-mcp-server
# Via Yarn
yarn global add jaegis-npm-mcp-server
npm-mcp-server
```
### System Requirements
- **Node.js**: 18.0.0 or higher
- **NPM**: 8.0.0 or higher
- **Internet**: Required for NPM registry access
- **Credentials**: NPM token for authentication-required operations
## 🤝 Contributing
1. Fork the repository
2. Create a feature branch
3. Make your changes
4. Add tests
5. Submit a pull request
## 📄 License
MIT License - see [LICENSE](LICENSE) file for details.
---
**Built with ❤️ by the JAEGIS Team**
For more information, visit [JAEGIS Documentation](https://jaegis.ai/docs)