versionator-mcp


Nameversionator-mcp JSON
Version 1.3.1 PyPI version JSON
download
home_pageNone
SummaryAn MCP server that queries package registries across 19 different ecosystems for latest package versions
upload_time2025-08-20 10:28:39
maintainerNone
docs_urlNone
authorNone
requires_python>=3.10
licenseMIT
keywords mcp model-context-protocol package-manager npm pypi rubygems hex
VCS
bugtrack_url
requirements fastmcp aiohttp pydantic
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Versionator MCP Server

[![CI Pipeline](https://github.com/trianglegrrl/versionator-mcp/actions/workflows/ci.yml/badge.svg)](https://github.com/trianglegrrl/versionator-mcp/actions/workflows/ci.yml)
[![PyPI version](https://badge.fury.io/py/versionator-mcp.svg)](https://badge.fury.io/py/versionator-mcp)
[![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/)

An MCP (Model Context Protocol) server that queries package registries across 19 different ecosystems to retrieve the latest release versions of packages. It follows a strict fail-hard policy and always returns current data.

## Features

- **19 Package Registries**: npm, RubyGems, PyPI, Hex.pm, crates.io, Bioconda, CRAN, Terraform Registry, DockerHub, CPAN, Go modules, Composer, NuGet, Homebrew, Nextflow, nf-core modules, nf-core subworkflows, Swift Package Manager, Maven Central
- **Language/Ecosystem Aliases**: Use familiar names like `python`, `rust`, `go`, etc.
- **No Caching**: Always returns current latest version
- **Fail-Hard Error Handling**: No fallbacks or stale data
- **Rich Metadata**: Package descriptions, homepages, and license information
- **Configurable Timeouts**: Adjust API request timeouts as needed
- **Test Client Included**: `vmcp` command-line tool for testing and manual queries
- **Optimized for Claude Desktop Integration**

## Quick Start

### Option 1: Using uvx (Recommended)

The easiest way to use Versionator with Claude Desktop is via [uvx](https://github.com/astral-sh/uv):

```bash
# Install uvx if you haven't already
curl -LsSf https://astral.sh/uv/install.sh | sh

# Run Versionator directly with uvx
uvx versionator-mcp
```

### Option 2: Install Locally

```bash
# Install from PyPI
pip install versionator-mcp

# Or install with pipx for isolated environment
pipx install versionator-mcp
```

## Editor Integration

### Claude Desktop

Add configuration to your Claude Desktop MCP settings:

**Config Location:**
- **macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
- **Windows**: `%APPDATA%\Claude\claude_desktop_config.json`

**Recommended (uvx):**
```json
{
  "mcpServers": {
    "versionator": {
      "command": "uvx",
      "args": ["versionator-mcp"]
    }
  }
}
```

**Alternative methods:**
```json
{
  "mcpServers": {
    "versionator": {
      "command": "pipx",
      "args": ["run", "versionator-mcp"]
    }
  }
}
```

### Cursor

Create `.cursor/mcp.json` in your project root:

```json
{
  "mcpServers": {
    "versionator": {
      "command": "uvx",
      "args": ["versionator-mcp"],
      "env": {
        "VERSIONATOR_REQUEST_TIMEOUT": "30"
      }
    }
  }
}
```

**Global configuration**: `~/.cursor/mcp.json`

**Pro Tip**: This repository includes a `.cursor/mcp.json` and `.cursor/rules` file that:
- Configures Versionator for immediate use
- Sets up rules to automatically check package versions before installations
- Ensures you always get current version information when working with dependencies

### Windsurf

Edit `~/.codeium/mcp_config.json`:

```json
{
  "mcpServers": {
    "versionator": {
      "command": "uvx",
      "args": ["versionator-mcp"]
    }
  }
}
```

**UI Method**: Settings → Tools → Windsurf Settings → Add Server

### Claude Code

Add to your Claude Code MCP configuration:

```json
{
  "mcpServers": {
    "versionator": {
      "command": "uvx",
      "args": ["versionator-mcp"]
    }
  }
}
```

> 📁 **Example configs**: See [`examples/`](examples/) directory for complete configuration files

## Available Functions

### 1. `get_package_version` - Universal Package Version Query

Query the latest version from any supported registry.

**Parameters:**
- `package_manager` (str): Registry name or alias
- `package_name` (str): Name of the package

**Supported Registries:**
- `npm` (aliases: `node`, `nodejs`) - Node.js packages
- `rubygems` (aliases: `gem`, `ruby`) - Ruby gems
- `pypi` (aliases: `pip`, `python`) - Python packages
- `hex` (aliases: `elixir`, `hex.pm`) - Elixir packages
- `crates` (aliases: `cargo`, `rust`) - Rust crates
- `bioconda` (aliases: `conda`) - Bioconda packages
- `cran` (aliases: `r`) - R packages
- `terraform` (aliases: `tf`) - Terraform providers
- `dockerhub` (aliases: `docker`) - Docker images
- `cpan` (aliases: `perl`) - Perl modules
- `go` (aliases: `golang`) - Go modules
- `composer` (aliases: `php`, `packagist`) - PHP packages
- `nuget` (aliases: `dotnet`, `.net`) - .NET packages
- `homebrew` (aliases: `brew`) - macOS packages
- `nextflow` (aliases: `nf-core`) - Nextflow pipelines
- `nf-core-module` (aliases: `nfcore-module`, `nf-module`) - nf-core modules
- `nf-core-subworkflow` (aliases: `nfcore-subworkflow`, `nf-subworkflow`) - nf-core subworkflows
- `swift` (aliases: `spm`) - Swift packages
- `maven` (aliases: `mvn`) - Java artifacts

**Examples:**
```python
# Query npm package
get_package_version("npm", "react")
# Returns: {"name": "react", "version": "19.1.1", ...}

# Query with aliases
get_package_version("python", "django")
get_package_version("rust", "serde")
get_package_version("go", "github.com/gin-gonic/gin")
get_package_version("terraform", "hashicorp/aws")
get_package_version("docker", "nginx")
get_package_version("r", "ggplot2")
get_package_version("php", "symfony/console")
get_package_version("dotnet", "Newtonsoft.Json")
get_package_version("homebrew", "git")
get_package_version("nextflow", "nf-core/rnaseq")
get_package_version("nf-core-module", "fastqc")
get_package_version("nf-core-subworkflow", "bam_sort_stats_samtools")
get_package_version("swift", "apple/swift-package-manager")
get_package_version("maven", "org.springframework:spring-core")
```

### 2. Registry-Specific Functions

- `get_npm_package(package_name)` - NPM packages
- `get_ruby_gem(gem_name)` - RubyGems packages
- `get_python_package(package_name)` - PyPI packages
- `get_elixir_package(package_name)` - Hex.pm packages
- `get_rust_crate(crate_name)` - Rust crates
- `get_bioconda_package(package_name)` - Bioconda packages
- `get_r_package(package_name)` - R packages
- `get_terraform_provider(provider_path)` - Terraform providers
- `get_docker_image(image_name)` - Docker images
- `get_perl_module(module_name)` - Perl modules
- `get_go_module(module_path)` - Go modules
- `get_php_package(package_name)` - PHP/Composer packages
- `get_dotnet_package(package_name)` - .NET/NuGet packages
- `get_homebrew_formula(formula_name)` - Homebrew formulas
- `get_nextflow_pipeline(pipeline_name)` - Nextflow pipelines
- `get_nfcore_module(module_name)` - nf-core modules
- `get_nfcore_subworkflow(subworkflow_name)` - nf-core subworkflows
- `get_swift_package(package_name)` - Swift packages
- `get_maven_artifact(artifact_name)` - Maven artifacts

## Response Format

All functions return a PackageVersion object:

```json
{
  "name": "react",
  "version": "19.1.1",
  "registry": "npm",
  "registry_url": "https://registry.npmjs.org/react/latest",
  "query_time": "2025-08-13T10:30:00Z",
  "description": "React is a JavaScript library for building user interfaces.",
  "homepage": "https://react.dev/",
  "license": "MIT"
}
```

## Testing with vmcp

The project includes a command-line test client called `vmcp` for manual testing and verification:

### Installation and Usage

```bash
# Make the vmcp script executable (if needed)
chmod +x vmcp

# Query packages from different registries
./vmcp python pandas          # Query PyPI for pandas
./vmcp npm react              # Query npm for react
./vmcp rust serde             # Query crates.io for serde
./vmcp go github.com/gin-gonic/gin  # Query Go modules
./vmcp terraform hashicorp/aws      # Query Terraform registry
./vmcp docker nginx           # Query DockerHub
./vmcp perl JSON              # Query CPAN
./vmcp r ggplot2              # Query CRAN
./vmcp bioconda samtools      # Query Bioconda
./vmcp php symfony/console    # Query Packagist for PHP packages
./vmcp dotnet Newtonsoft.Json # Query NuGet for .NET packages
./vmcp homebrew git           # Query Homebrew formulas
./vmcp nextflow nf-core/rnaseq # Query Nextflow pipelines
./vmcp nf-core-module fastqc  # Query nf-core modules
./vmcp nf-core-subworkflow bam_sort_stats_samtools # Query nf-core subworkflows
./vmcp swift apple/swift-package-manager # Query Swift packages
./vmcp maven org.springframework:spring-core # Query Maven Central

# List all available MCP tools
./vmcp --list-tools

# Check server health
./vmcp --health
```

### Example Output

```bash
$ ./vmcp rust serde
🔍 Querying rust/serde...
✅ serde @ v1.0.215 (crates)
   📝 A generic serialization/deserialization framework
   🏠 https://serde.rs
```

The `vmcp` client is particularly useful for:
- **Testing your MCP setup** before integrating with editors
- **Verifying package queries** work correctly
- **Debugging connection issues** with the MCP server
- **Exploring available tools** and their capabilities

## Error Handling

The server follows a strict **FAIL HARD** policy:

- **No Fallbacks**: Never returns cached or default values
- **No Suppression**: All errors propagate to the caller
- **Clear Messages**: Errors include context and details
- **Input Validation**: Validates before making API calls

Common errors:
- `ValueError`: Invalid package name or unknown package manager
- `Exception`: Package not found or API failures

## Configuration

Environment variables (optional):

- `VERSIONATOR_REQUEST_TIMEOUT`: API request timeout in seconds (default: 30)

## Troubleshooting

### Common MCP Issues

1. **Server not starting**: Check that the command path is correct in your configuration
2. **Permission errors**: Ensure the Python executable has proper permissions
3. **Package not found**: Verify the package is installed and accessible from the command line
4. **Editor not detecting server**: Restart your editor after adding MCP configuration

### Testing Your Setup

You can test the server directly from the command line:

```bash
# Test with uvx
uvx versionator-mcp

# Test with pipx
pipx run versionator-mcp

# Test direct installation
python -m versionator_mcp.main
```

The server should start and show initialization messages. Press `Ctrl+C` to stop.

## Alternative: HTTP Server Mode

For advanced use cases, you can run Versionator as an HTTP server:

```bash
# Start HTTP server (default port 8083)
FASTMCP_PORT=8083 python -m versionator_mcp.main

# Custom port
FASTMCP_PORT=9000 python -m versionator_mcp.main
```

Then configure Claude Desktop with:

```json
{
  "mcpServers": {
    "versionator": {
      "url": "http://localhost:8083/mcp",
      "transport": "http"
    }
  }
}
```

**Note**: HTTP mode requires manually starting the server before using Claude Desktop.

## Development

### Setup

```bash
# Clone the repository
git clone https://github.com/trianglegrrl/versionator-mcp.git
cd versionator-mcp

# Install in development mode with dev dependencies
pip install -e ".[dev]"
```

### Project Structure

The project follows a clean, modular architecture:

```
versionator_mcp/
├── __init__.py
├── app.py                    # FastMCP app factory and configuration
├── config.py                 # Environment configuration management
├── main.py                   # Entry point for the MCP server
├── models.py                 # Pydantic data models
├── core/                     # Core utilities and base classes
│   ├── __init__.py
│   ├── base_registry.py      # Abstract base class for registries
│   ├── http_client.py        # Shared HTTP client utilities
│   └── registry_factory.py   # Registry factory and mapping
├── registries/               # Individual registry implementations
│   ├── __init__.py
│   ├── npm.py               # NPM registry
│   ├── rubygems.py          # RubyGems registry
│   ├── pypi.py              # PyPI registry
│   ├── hex.py               # Hex.pm registry
│   ├── crates.py            # Crates.io registry
│   ├── bioconda.py          # Bioconda registry
│   ├── cran.py              # CRAN registry
│   ├── terraform.py         # Terraform registry
│   ├── dockerhub.py         # DockerHub registry
│   ├── cpan.py              # CPAN registry
│   ├── go.py                # Go modules registry
│   ├── composer.py          # PHP Composer registry
│   ├── nuget.py             # NuGet registry
│   ├── homebrew.py          # Homebrew registry
│   ├── nextflow.py          # Nextflow registry
│   ├── nfcore.py            # nf-core modules/subworkflows
│   ├── swift.py             # Swift Package Manager
│   └── maven.py             # Maven Central
└── tools/                   # MCP tool registration
    ├── __init__.py
    └── registry_tools.py     # MCP tool definitions
```

### Architecture Benefits

- **Modular Design**: Each registry is implemented in its own file with a consistent interface
- **Single Responsibility**: Each module has a clear, focused purpose
- **Easy Extension**: Adding new registries requires minimal changes to existing code
- **Testability**: Individual registries can be tested in isolation
- **Maintainability**: Changes to one registry don't affect others
- **DRY Principle**: Common HTTP logic is shared across all registries

### Adding New Registries

To add support for a new package registry:

1. **Create Registry Implementation**: Create a new file in `versionator_mcp/registries/` (e.g., `new_registry.py`)
2. **Extend BaseRegistry**: Implement the abstract methods from `BaseRegistry`
3. **Register with Factory**: Call `register_registry()` with your class and aliases
4. **Add MCP Tool**: Add corresponding tool function in `registry_tools.py`

Example:

```python
# versionator_mcp/registries/new_registry.py
from ..core import BaseRegistry, register_registry
from ..models import PackageVersion

class NewRegistry(BaseRegistry):
    @property
    def registry_name(self) -> str:
        return "new_registry"

    async def get_latest_version(self, package_name: str) -> PackageVersion:
        package_name = self.validate_package_name(package_name)
        url = f"https://api.new-registry.com/packages/{package_name}"

        data = await self.http_client.get_json(url, registry_name="NewRegistry", package_name=package_name)

        return PackageVersion(
            name=package_name,
            version=data.get("version", "unknown"),
            registry="new_registry",
            registry_url=url,
            query_time=self.http_client.get_current_timestamp(),
            description=data.get("description"),
            homepage=data.get("homepage"),
            license=data.get("license"),
        )

# Register with aliases
register_registry(NewRegistry, ["new", "nr"])
```

### Pre-commit Hooks (Recommended)

This project uses pre-commit hooks to ensure code quality and prevent issues:

```bash
# Install pre-commit hooks
pre-commit install
pre-commit install --hook-type pre-push

# Run hooks manually on all files
pre-commit run --all-files
```

**Pre-commit hooks** (run on `git commit`):
- Trailing whitespace removal, end-of-file fixing, YAML validation
- Large file detection, merge conflict detection, debug statement detection
- **Black** code formatting, **isort** import sorting, **mypy** type checking

**Pre-push hooks** (run on `git push`):
- **pytest** test suite (skips GitHub API tests to avoid rate limits)

The hooks automatically fix formatting issues when possible and prevent commits/pushes that don't meet quality standards.

### Running Tests

```bash
# Run tests
pytest

# Run tests with coverage
pytest --cov=versionator_mcp

# Run linting
black --check .
isort --check-only .
mypy versionator_mcp/
```

### Testing the MCP Server

```bash
# Test stdio transport (default)
echo '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}' | python -m versionator_mcp.main
```

## Contributing

1. Fork the repository
2. Create a feature branch (`git checkout -b feature/amazing-feature`)
3. Make your changes and add tests
4. Run the test suite (`pytest`)
5. Commit your changes (`git commit -m 'Add amazing feature'`)
6. Push to the branch (`git push origin feature/amazing-feature`)
7. Open a Pull Request

## Registry APIs

The server queries these endpoints:

- **npm**: `https://registry.npmjs.org/{package}/latest`
- **RubyGems**: `https://rubygems.org/api/v1/versions/{gem}/latest.json`
- **PyPI**: `https://pypi.org/pypi/{package}/json`
- **Hex.pm**: `https://hex.pm/api/packages/{package}`
- **crates.io**: `https://crates.io/api/v1/crates/{crate}`
- **Bioconda**: `https://api.anaconda.org/package/bioconda/{package}`
- **CRAN**: `https://crandb.r-pkg.org/{package}`
- **Terraform**: `https://registry.terraform.io/v1/providers/{provider_path}`
- **DockerHub**: `https://hub.docker.com/v2/repositories/{namespace}/{repo}/tags`
- **CPAN**: `https://fastapi.metacpan.org/v1/module/{module}`
- **Go Modules**: `https://api.github.com/repos/{owner}/{repo}/releases/latest` (GitHub-hosted)
- **Composer**: `https://packagist.org/packages/{vendor}/{package}.json`
- **NuGet**: `https://api.nuget.org/v3-flatcontainer/{package}/index.json`
- **Homebrew**: `https://formulae.brew.sh/api/formula/{formula}.json`
- **Nextflow**: `https://api.github.com/repos/nf-core/{pipeline}/releases/latest`
- **nf-core modules**: `https://api.github.com/repos/nf-core/modules/commits?path=modules/nf-core/{module}`
- **nf-core subworkflows**: `https://api.github.com/repos/nf-core/modules/commits?path=subworkflows/nf-core/{subworkflow}`
- **Swift**: `https://api.github.com/repos/{owner}/{repo}/releases/latest`
- **Maven**: `https://search.maven.org/solrsearch/select?q=g:{group}+AND+a:{artifact}`

## Performance Considerations

- **No Caching**: Each call makes a fresh API request
- **Timeout**: Configurable via `VERSIONATOR_REQUEST_TIMEOUT`
- **Concurrent Requests**: Async implementation allows parallel queries
- **Rate Limits**: Be mindful of registry rate limits

## License

This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.

## Changelog

### v1.3.1 (Release Process Fix)
- **FIXED**: GitHub Release creation process for automated PyPI publishing
- **IMPROVED**: Proper workflow trigger configuration for seamless releases
- **MAINTAINED**: All v1.3.0 features and improvements included

### v1.3.0 (Refactored Architecture & Type Safety)
- **REFACTORED**: Complete codebase restructure for improved maintainability
- **NEW**: Modular registry architecture with individual files for each package manager
- **NEW**: Abstract base class pattern for consistent registry implementations
- **NEW**: Factory pattern for registry management and discovery
- **NEW**: Shared HTTP client utilities to eliminate code duplication
- **NEW**: Modular test structure mirroring the main codebase organization
- **IMPROVED**: 100% type safety compliance - zero mypy errors across 30 source files
- **IMPROVED**: Enhanced type annotations throughout the entire codebase
- **IMPROVED**: HTTP client return type flexibility for diverse API responses
- **IMPROVED**: Proper forward reference handling for type checking
- **IMPROVED**: Registry factory type safety with Optional parameter handling
- **IMPROVED**: Separation of concerns - MCP tools, registries, and core utilities
- **IMPROVED**: Easy extensibility - adding new registries requires minimal code changes
- **IMPROVED**: Better testability with isolated registry implementations
- **IMPROVED**: Consistent error handling across all registries
- **IMPROVED**: Developer experience with clear project structure and full IDE type support
- **MAINTAINED**: Full backward compatibility - all existing functionality preserved
- **MAINTAINED**: All 19 package registries with identical behavior
- **MAINTAINED**: Complete MCP tool compatibility
- **QUALITY**: 56 comprehensive tests passing with 6 appropriately skipped in CI
- **QUALITY**: Organized test structure with individual files per registry

### v1.2.3
- **FIXED**: GitHub API rate limit issues in CI by skipping GitHub-dependent tests
- **IMPROVED**: CI reliability - 47 tests pass, 15 appropriately skipped in CI environment
- **ENHANCED**: Maintains full test coverage locally while ensuring green CI builds
- **QUALITY**: Resolves PyPI publish workflow failures caused by rate limiting
- All features from v1.2.2 included with CI reliability improvements

### v1.2.2
- **FIXED**: Black code formatting compliance for nf-core functions
- **IMPROVED**: CI/CD pipeline reliability with direct test execution in publish workflow
- **ENHANCED**: Eliminated race condition between CI status checking and PyPI publish
- All features from v1.2.1 included with formatting fixes

### v1.2.1
- **NEW**: Added support for nf-core modules and subworkflows:
  - **nf-core modules** - `nf-core-module`, `nfcore-module`, `nf-module`
  - **nf-core subworkflows** - `nf-core-subworkflow`, `nfcore-subworkflow`, `nf-subworkflow`
- **NEW**: Registry-specific MCP tools:
  - `get_nfcore_module(module_name)` for nf-core modules
  - `get_nfcore_subworkflow(subworkflow_name)` for nf-core subworkflows
- **IMPROVED**: Enhanced Nextflow ecosystem coverage for scientific computing
- **IMPROVED**: Updated documentation with nf-core module/subworkflow examples
- **QUALITY**: 62 comprehensive tests - all passing ✅
- **QUALITY**: Full backward compatibility maintained

### v1.2.0
- **NEW**: Added support for 6 additional package registries:
  - PHP Composer (Packagist) - `composer`, `php`, `packagist`
  - .NET NuGet - `nuget`, `dotnet`, `.net`
  - Homebrew - `homebrew`, `brew`
  - Nextflow (nf-core) - `nextflow`, `nf-core`
  - Swift Package Manager - `swift`, `spm`
  - Maven Central - `maven`, `mvn`
- **NEW**: Registry-specific MCP tools for all new package managers
- **IMPROVED**: Enhanced vmcp test client with examples for all 17 registries
- **IMPROVED**: Comprehensive documentation updates with new API endpoints
- **IMPROVED**: Updated error messages and validation for new registries
- **QUALITY**: 56 comprehensive tests - all passing ✅
- **QUALITY**: Full backward compatibility maintained

### v1.1.0
- **NEW**: Added support for 7 additional package registries:
  - Rust (crates.io) - `rust`, `cargo`, `crates`
  - Bioconda (anaconda.org) - `bioconda`, `conda`
  - R (CRAN) - `r`, `cran`
  - Terraform Registry - `terraform`, `tf`
  - DockerHub - `docker`, `dockerhub`
  - Perl (CPAN) - `perl`, `cpan`
  - Go Modules - `go`, `golang`
- **NEW**: Added `vmcp` command-line test client
- **NEW**: Registry-specific MCP tools for each package manager
- **IMPROVED**: Enhanced documentation with comprehensive examples
- **IMPROVED**: Updated error messages and validation

### v1.0.0
- Initial release
- Support for npm, RubyGems, PyPI, and Hex.pm
- Optimized for Claude Desktop integration
- uvx and pipx support
- Comprehensive error handling
- MCP protocol compliance

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "versionator-mcp",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.10",
    "maintainer_email": null,
    "keywords": "mcp, model-context-protocol, package-manager, npm, pypi, rubygems, hex",
    "author": null,
    "author_email": "Alaina Hardie <alainahardie@gmail.com>",
    "download_url": "https://files.pythonhosted.org/packages/e9/9b/a97938143332b4c33f66c24b4c8910f44f330a594a8e30e637121233c490/versionator_mcp-1.3.1.tar.gz",
    "platform": null,
    "description": "# Versionator MCP Server\n\n[![CI Pipeline](https://github.com/trianglegrrl/versionator-mcp/actions/workflows/ci.yml/badge.svg)](https://github.com/trianglegrrl/versionator-mcp/actions/workflows/ci.yml)\n[![PyPI version](https://badge.fury.io/py/versionator-mcp.svg)](https://badge.fury.io/py/versionator-mcp)\n[![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/)\n\nAn MCP (Model Context Protocol) server that queries package registries across 19 different ecosystems to retrieve the latest release versions of packages. It follows a strict fail-hard policy and always returns current data.\n\n## Features\n\n- **19 Package Registries**: npm, RubyGems, PyPI, Hex.pm, crates.io, Bioconda, CRAN, Terraform Registry, DockerHub, CPAN, Go modules, Composer, NuGet, Homebrew, Nextflow, nf-core modules, nf-core subworkflows, Swift Package Manager, Maven Central\n- **Language/Ecosystem Aliases**: Use familiar names like `python`, `rust`, `go`, etc.\n- **No Caching**: Always returns current latest version\n- **Fail-Hard Error Handling**: No fallbacks or stale data\n- **Rich Metadata**: Package descriptions, homepages, and license information\n- **Configurable Timeouts**: Adjust API request timeouts as needed\n- **Test Client Included**: `vmcp` command-line tool for testing and manual queries\n- **Optimized for Claude Desktop Integration**\n\n## Quick Start\n\n### Option 1: Using uvx (Recommended)\n\nThe easiest way to use Versionator with Claude Desktop is via [uvx](https://github.com/astral-sh/uv):\n\n```bash\n# Install uvx if you haven't already\ncurl -LsSf https://astral.sh/uv/install.sh | sh\n\n# Run Versionator directly with uvx\nuvx versionator-mcp\n```\n\n### Option 2: Install Locally\n\n```bash\n# Install from PyPI\npip install versionator-mcp\n\n# Or install with pipx for isolated environment\npipx install versionator-mcp\n```\n\n## Editor Integration\n\n### Claude Desktop\n\nAdd configuration to your Claude Desktop MCP settings:\n\n**Config Location:**\n- **macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`\n- **Windows**: `%APPDATA%\\Claude\\claude_desktop_config.json`\n\n**Recommended (uvx):**\n```json\n{\n  \"mcpServers\": {\n    \"versionator\": {\n      \"command\": \"uvx\",\n      \"args\": [\"versionator-mcp\"]\n    }\n  }\n}\n```\n\n**Alternative methods:**\n```json\n{\n  \"mcpServers\": {\n    \"versionator\": {\n      \"command\": \"pipx\",\n      \"args\": [\"run\", \"versionator-mcp\"]\n    }\n  }\n}\n```\n\n### Cursor\n\nCreate `.cursor/mcp.json` in your project root:\n\n```json\n{\n  \"mcpServers\": {\n    \"versionator\": {\n      \"command\": \"uvx\",\n      \"args\": [\"versionator-mcp\"],\n      \"env\": {\n        \"VERSIONATOR_REQUEST_TIMEOUT\": \"30\"\n      }\n    }\n  }\n}\n```\n\n**Global configuration**: `~/.cursor/mcp.json`\n\n**Pro Tip**: This repository includes a `.cursor/mcp.json` and `.cursor/rules` file that:\n- Configures Versionator for immediate use\n- Sets up rules to automatically check package versions before installations\n- Ensures you always get current version information when working with dependencies\n\n### Windsurf\n\nEdit `~/.codeium/mcp_config.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"versionator\": {\n      \"command\": \"uvx\",\n      \"args\": [\"versionator-mcp\"]\n    }\n  }\n}\n```\n\n**UI Method**: Settings \u2192 Tools \u2192 Windsurf Settings \u2192 Add Server\n\n### Claude Code\n\nAdd to your Claude Code MCP configuration:\n\n```json\n{\n  \"mcpServers\": {\n    \"versionator\": {\n      \"command\": \"uvx\",\n      \"args\": [\"versionator-mcp\"]\n    }\n  }\n}\n```\n\n> \ud83d\udcc1 **Example configs**: See [`examples/`](examples/) directory for complete configuration files\n\n## Available Functions\n\n### 1. `get_package_version` - Universal Package Version Query\n\nQuery the latest version from any supported registry.\n\n**Parameters:**\n- `package_manager` (str): Registry name or alias\n- `package_name` (str): Name of the package\n\n**Supported Registries:**\n- `npm` (aliases: `node`, `nodejs`) - Node.js packages\n- `rubygems` (aliases: `gem`, `ruby`) - Ruby gems\n- `pypi` (aliases: `pip`, `python`) - Python packages\n- `hex` (aliases: `elixir`, `hex.pm`) - Elixir packages\n- `crates` (aliases: `cargo`, `rust`) - Rust crates\n- `bioconda` (aliases: `conda`) - Bioconda packages\n- `cran` (aliases: `r`) - R packages\n- `terraform` (aliases: `tf`) - Terraform providers\n- `dockerhub` (aliases: `docker`) - Docker images\n- `cpan` (aliases: `perl`) - Perl modules\n- `go` (aliases: `golang`) - Go modules\n- `composer` (aliases: `php`, `packagist`) - PHP packages\n- `nuget` (aliases: `dotnet`, `.net`) - .NET packages\n- `homebrew` (aliases: `brew`) - macOS packages\n- `nextflow` (aliases: `nf-core`) - Nextflow pipelines\n- `nf-core-module` (aliases: `nfcore-module`, `nf-module`) - nf-core modules\n- `nf-core-subworkflow` (aliases: `nfcore-subworkflow`, `nf-subworkflow`) - nf-core subworkflows\n- `swift` (aliases: `spm`) - Swift packages\n- `maven` (aliases: `mvn`) - Java artifacts\n\n**Examples:**\n```python\n# Query npm package\nget_package_version(\"npm\", \"react\")\n# Returns: {\"name\": \"react\", \"version\": \"19.1.1\", ...}\n\n# Query with aliases\nget_package_version(\"python\", \"django\")\nget_package_version(\"rust\", \"serde\")\nget_package_version(\"go\", \"github.com/gin-gonic/gin\")\nget_package_version(\"terraform\", \"hashicorp/aws\")\nget_package_version(\"docker\", \"nginx\")\nget_package_version(\"r\", \"ggplot2\")\nget_package_version(\"php\", \"symfony/console\")\nget_package_version(\"dotnet\", \"Newtonsoft.Json\")\nget_package_version(\"homebrew\", \"git\")\nget_package_version(\"nextflow\", \"nf-core/rnaseq\")\nget_package_version(\"nf-core-module\", \"fastqc\")\nget_package_version(\"nf-core-subworkflow\", \"bam_sort_stats_samtools\")\nget_package_version(\"swift\", \"apple/swift-package-manager\")\nget_package_version(\"maven\", \"org.springframework:spring-core\")\n```\n\n### 2. Registry-Specific Functions\n\n- `get_npm_package(package_name)` - NPM packages\n- `get_ruby_gem(gem_name)` - RubyGems packages\n- `get_python_package(package_name)` - PyPI packages\n- `get_elixir_package(package_name)` - Hex.pm packages\n- `get_rust_crate(crate_name)` - Rust crates\n- `get_bioconda_package(package_name)` - Bioconda packages\n- `get_r_package(package_name)` - R packages\n- `get_terraform_provider(provider_path)` - Terraform providers\n- `get_docker_image(image_name)` - Docker images\n- `get_perl_module(module_name)` - Perl modules\n- `get_go_module(module_path)` - Go modules\n- `get_php_package(package_name)` - PHP/Composer packages\n- `get_dotnet_package(package_name)` - .NET/NuGet packages\n- `get_homebrew_formula(formula_name)` - Homebrew formulas\n- `get_nextflow_pipeline(pipeline_name)` - Nextflow pipelines\n- `get_nfcore_module(module_name)` - nf-core modules\n- `get_nfcore_subworkflow(subworkflow_name)` - nf-core subworkflows\n- `get_swift_package(package_name)` - Swift packages\n- `get_maven_artifact(artifact_name)` - Maven artifacts\n\n## Response Format\n\nAll functions return a PackageVersion object:\n\n```json\n{\n  \"name\": \"react\",\n  \"version\": \"19.1.1\",\n  \"registry\": \"npm\",\n  \"registry_url\": \"https://registry.npmjs.org/react/latest\",\n  \"query_time\": \"2025-08-13T10:30:00Z\",\n  \"description\": \"React is a JavaScript library for building user interfaces.\",\n  \"homepage\": \"https://react.dev/\",\n  \"license\": \"MIT\"\n}\n```\n\n## Testing with vmcp\n\nThe project includes a command-line test client called `vmcp` for manual testing and verification:\n\n### Installation and Usage\n\n```bash\n# Make the vmcp script executable (if needed)\nchmod +x vmcp\n\n# Query packages from different registries\n./vmcp python pandas          # Query PyPI for pandas\n./vmcp npm react              # Query npm for react\n./vmcp rust serde             # Query crates.io for serde\n./vmcp go github.com/gin-gonic/gin  # Query Go modules\n./vmcp terraform hashicorp/aws      # Query Terraform registry\n./vmcp docker nginx           # Query DockerHub\n./vmcp perl JSON              # Query CPAN\n./vmcp r ggplot2              # Query CRAN\n./vmcp bioconda samtools      # Query Bioconda\n./vmcp php symfony/console    # Query Packagist for PHP packages\n./vmcp dotnet Newtonsoft.Json # Query NuGet for .NET packages\n./vmcp homebrew git           # Query Homebrew formulas\n./vmcp nextflow nf-core/rnaseq # Query Nextflow pipelines\n./vmcp nf-core-module fastqc  # Query nf-core modules\n./vmcp nf-core-subworkflow bam_sort_stats_samtools # Query nf-core subworkflows\n./vmcp swift apple/swift-package-manager # Query Swift packages\n./vmcp maven org.springframework:spring-core # Query Maven Central\n\n# List all available MCP tools\n./vmcp --list-tools\n\n# Check server health\n./vmcp --health\n```\n\n### Example Output\n\n```bash\n$ ./vmcp rust serde\n\ud83d\udd0d Querying rust/serde...\n\u2705 serde @ v1.0.215 (crates)\n   \ud83d\udcdd A generic serialization/deserialization framework\n   \ud83c\udfe0 https://serde.rs\n```\n\nThe `vmcp` client is particularly useful for:\n- **Testing your MCP setup** before integrating with editors\n- **Verifying package queries** work correctly\n- **Debugging connection issues** with the MCP server\n- **Exploring available tools** and their capabilities\n\n## Error Handling\n\nThe server follows a strict **FAIL HARD** policy:\n\n- **No Fallbacks**: Never returns cached or default values\n- **No Suppression**: All errors propagate to the caller\n- **Clear Messages**: Errors include context and details\n- **Input Validation**: Validates before making API calls\n\nCommon errors:\n- `ValueError`: Invalid package name or unknown package manager\n- `Exception`: Package not found or API failures\n\n## Configuration\n\nEnvironment variables (optional):\n\n- `VERSIONATOR_REQUEST_TIMEOUT`: API request timeout in seconds (default: 30)\n\n## Troubleshooting\n\n### Common MCP Issues\n\n1. **Server not starting**: Check that the command path is correct in your configuration\n2. **Permission errors**: Ensure the Python executable has proper permissions\n3. **Package not found**: Verify the package is installed and accessible from the command line\n4. **Editor not detecting server**: Restart your editor after adding MCP configuration\n\n### Testing Your Setup\n\nYou can test the server directly from the command line:\n\n```bash\n# Test with uvx\nuvx versionator-mcp\n\n# Test with pipx\npipx run versionator-mcp\n\n# Test direct installation\npython -m versionator_mcp.main\n```\n\nThe server should start and show initialization messages. Press `Ctrl+C` to stop.\n\n## Alternative: HTTP Server Mode\n\nFor advanced use cases, you can run Versionator as an HTTP server:\n\n```bash\n# Start HTTP server (default port 8083)\nFASTMCP_PORT=8083 python -m versionator_mcp.main\n\n# Custom port\nFASTMCP_PORT=9000 python -m versionator_mcp.main\n```\n\nThen configure Claude Desktop with:\n\n```json\n{\n  \"mcpServers\": {\n    \"versionator\": {\n      \"url\": \"http://localhost:8083/mcp\",\n      \"transport\": \"http\"\n    }\n  }\n}\n```\n\n**Note**: HTTP mode requires manually starting the server before using Claude Desktop.\n\n## Development\n\n### Setup\n\n```bash\n# Clone the repository\ngit clone https://github.com/trianglegrrl/versionator-mcp.git\ncd versionator-mcp\n\n# Install in development mode with dev dependencies\npip install -e \".[dev]\"\n```\n\n### Project Structure\n\nThe project follows a clean, modular architecture:\n\n```\nversionator_mcp/\n\u251c\u2500\u2500 __init__.py\n\u251c\u2500\u2500 app.py                    # FastMCP app factory and configuration\n\u251c\u2500\u2500 config.py                 # Environment configuration management\n\u251c\u2500\u2500 main.py                   # Entry point for the MCP server\n\u251c\u2500\u2500 models.py                 # Pydantic data models\n\u251c\u2500\u2500 core/                     # Core utilities and base classes\n\u2502   \u251c\u2500\u2500 __init__.py\n\u2502   \u251c\u2500\u2500 base_registry.py      # Abstract base class for registries\n\u2502   \u251c\u2500\u2500 http_client.py        # Shared HTTP client utilities\n\u2502   \u2514\u2500\u2500 registry_factory.py   # Registry factory and mapping\n\u251c\u2500\u2500 registries/               # Individual registry implementations\n\u2502   \u251c\u2500\u2500 __init__.py\n\u2502   \u251c\u2500\u2500 npm.py               # NPM registry\n\u2502   \u251c\u2500\u2500 rubygems.py          # RubyGems registry\n\u2502   \u251c\u2500\u2500 pypi.py              # PyPI registry\n\u2502   \u251c\u2500\u2500 hex.py               # Hex.pm registry\n\u2502   \u251c\u2500\u2500 crates.py            # Crates.io registry\n\u2502   \u251c\u2500\u2500 bioconda.py          # Bioconda registry\n\u2502   \u251c\u2500\u2500 cran.py              # CRAN registry\n\u2502   \u251c\u2500\u2500 terraform.py         # Terraform registry\n\u2502   \u251c\u2500\u2500 dockerhub.py         # DockerHub registry\n\u2502   \u251c\u2500\u2500 cpan.py              # CPAN registry\n\u2502   \u251c\u2500\u2500 go.py                # Go modules registry\n\u2502   \u251c\u2500\u2500 composer.py          # PHP Composer registry\n\u2502   \u251c\u2500\u2500 nuget.py             # NuGet registry\n\u2502   \u251c\u2500\u2500 homebrew.py          # Homebrew registry\n\u2502   \u251c\u2500\u2500 nextflow.py          # Nextflow registry\n\u2502   \u251c\u2500\u2500 nfcore.py            # nf-core modules/subworkflows\n\u2502   \u251c\u2500\u2500 swift.py             # Swift Package Manager\n\u2502   \u2514\u2500\u2500 maven.py             # Maven Central\n\u2514\u2500\u2500 tools/                   # MCP tool registration\n    \u251c\u2500\u2500 __init__.py\n    \u2514\u2500\u2500 registry_tools.py     # MCP tool definitions\n```\n\n### Architecture Benefits\n\n- **Modular Design**: Each registry is implemented in its own file with a consistent interface\n- **Single Responsibility**: Each module has a clear, focused purpose\n- **Easy Extension**: Adding new registries requires minimal changes to existing code\n- **Testability**: Individual registries can be tested in isolation\n- **Maintainability**: Changes to one registry don't affect others\n- **DRY Principle**: Common HTTP logic is shared across all registries\n\n### Adding New Registries\n\nTo add support for a new package registry:\n\n1. **Create Registry Implementation**: Create a new file in `versionator_mcp/registries/` (e.g., `new_registry.py`)\n2. **Extend BaseRegistry**: Implement the abstract methods from `BaseRegistry`\n3. **Register with Factory**: Call `register_registry()` with your class and aliases\n4. **Add MCP Tool**: Add corresponding tool function in `registry_tools.py`\n\nExample:\n\n```python\n# versionator_mcp/registries/new_registry.py\nfrom ..core import BaseRegistry, register_registry\nfrom ..models import PackageVersion\n\nclass NewRegistry(BaseRegistry):\n    @property\n    def registry_name(self) -> str:\n        return \"new_registry\"\n\n    async def get_latest_version(self, package_name: str) -> PackageVersion:\n        package_name = self.validate_package_name(package_name)\n        url = f\"https://api.new-registry.com/packages/{package_name}\"\n\n        data = await self.http_client.get_json(url, registry_name=\"NewRegistry\", package_name=package_name)\n\n        return PackageVersion(\n            name=package_name,\n            version=data.get(\"version\", \"unknown\"),\n            registry=\"new_registry\",\n            registry_url=url,\n            query_time=self.http_client.get_current_timestamp(),\n            description=data.get(\"description\"),\n            homepage=data.get(\"homepage\"),\n            license=data.get(\"license\"),\n        )\n\n# Register with aliases\nregister_registry(NewRegistry, [\"new\", \"nr\"])\n```\n\n### Pre-commit Hooks (Recommended)\n\nThis project uses pre-commit hooks to ensure code quality and prevent issues:\n\n```bash\n# Install pre-commit hooks\npre-commit install\npre-commit install --hook-type pre-push\n\n# Run hooks manually on all files\npre-commit run --all-files\n```\n\n**Pre-commit hooks** (run on `git commit`):\n- Trailing whitespace removal, end-of-file fixing, YAML validation\n- Large file detection, merge conflict detection, debug statement detection\n- **Black** code formatting, **isort** import sorting, **mypy** type checking\n\n**Pre-push hooks** (run on `git push`):\n- **pytest** test suite (skips GitHub API tests to avoid rate limits)\n\nThe hooks automatically fix formatting issues when possible and prevent commits/pushes that don't meet quality standards.\n\n### Running Tests\n\n```bash\n# Run tests\npytest\n\n# Run tests with coverage\npytest --cov=versionator_mcp\n\n# Run linting\nblack --check .\nisort --check-only .\nmypy versionator_mcp/\n```\n\n### Testing the MCP Server\n\n```bash\n# Test stdio transport (default)\necho '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"tools/list\",\"params\":{}}' | python -m versionator_mcp.main\n```\n\n## Contributing\n\n1. Fork the repository\n2. Create a feature branch (`git checkout -b feature/amazing-feature`)\n3. Make your changes and add tests\n4. Run the test suite (`pytest`)\n5. Commit your changes (`git commit -m 'Add amazing feature'`)\n6. Push to the branch (`git push origin feature/amazing-feature`)\n7. Open a Pull Request\n\n## Registry APIs\n\nThe server queries these endpoints:\n\n- **npm**: `https://registry.npmjs.org/{package}/latest`\n- **RubyGems**: `https://rubygems.org/api/v1/versions/{gem}/latest.json`\n- **PyPI**: `https://pypi.org/pypi/{package}/json`\n- **Hex.pm**: `https://hex.pm/api/packages/{package}`\n- **crates.io**: `https://crates.io/api/v1/crates/{crate}`\n- **Bioconda**: `https://api.anaconda.org/package/bioconda/{package}`\n- **CRAN**: `https://crandb.r-pkg.org/{package}`\n- **Terraform**: `https://registry.terraform.io/v1/providers/{provider_path}`\n- **DockerHub**: `https://hub.docker.com/v2/repositories/{namespace}/{repo}/tags`\n- **CPAN**: `https://fastapi.metacpan.org/v1/module/{module}`\n- **Go Modules**: `https://api.github.com/repos/{owner}/{repo}/releases/latest` (GitHub-hosted)\n- **Composer**: `https://packagist.org/packages/{vendor}/{package}.json`\n- **NuGet**: `https://api.nuget.org/v3-flatcontainer/{package}/index.json`\n- **Homebrew**: `https://formulae.brew.sh/api/formula/{formula}.json`\n- **Nextflow**: `https://api.github.com/repos/nf-core/{pipeline}/releases/latest`\n- **nf-core modules**: `https://api.github.com/repos/nf-core/modules/commits?path=modules/nf-core/{module}`\n- **nf-core subworkflows**: `https://api.github.com/repos/nf-core/modules/commits?path=subworkflows/nf-core/{subworkflow}`\n- **Swift**: `https://api.github.com/repos/{owner}/{repo}/releases/latest`\n- **Maven**: `https://search.maven.org/solrsearch/select?q=g:{group}+AND+a:{artifact}`\n\n## Performance Considerations\n\n- **No Caching**: Each call makes a fresh API request\n- **Timeout**: Configurable via `VERSIONATOR_REQUEST_TIMEOUT`\n- **Concurrent Requests**: Async implementation allows parallel queries\n- **Rate Limits**: Be mindful of registry rate limits\n\n## License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n## Changelog\n\n### v1.3.1 (Release Process Fix)\n- **FIXED**: GitHub Release creation process for automated PyPI publishing\n- **IMPROVED**: Proper workflow trigger configuration for seamless releases\n- **MAINTAINED**: All v1.3.0 features and improvements included\n\n### v1.3.0 (Refactored Architecture & Type Safety)\n- **REFACTORED**: Complete codebase restructure for improved maintainability\n- **NEW**: Modular registry architecture with individual files for each package manager\n- **NEW**: Abstract base class pattern for consistent registry implementations\n- **NEW**: Factory pattern for registry management and discovery\n- **NEW**: Shared HTTP client utilities to eliminate code duplication\n- **NEW**: Modular test structure mirroring the main codebase organization\n- **IMPROVED**: 100% type safety compliance - zero mypy errors across 30 source files\n- **IMPROVED**: Enhanced type annotations throughout the entire codebase\n- **IMPROVED**: HTTP client return type flexibility for diverse API responses\n- **IMPROVED**: Proper forward reference handling for type checking\n- **IMPROVED**: Registry factory type safety with Optional parameter handling\n- **IMPROVED**: Separation of concerns - MCP tools, registries, and core utilities\n- **IMPROVED**: Easy extensibility - adding new registries requires minimal code changes\n- **IMPROVED**: Better testability with isolated registry implementations\n- **IMPROVED**: Consistent error handling across all registries\n- **IMPROVED**: Developer experience with clear project structure and full IDE type support\n- **MAINTAINED**: Full backward compatibility - all existing functionality preserved\n- **MAINTAINED**: All 19 package registries with identical behavior\n- **MAINTAINED**: Complete MCP tool compatibility\n- **QUALITY**: 56 comprehensive tests passing with 6 appropriately skipped in CI\n- **QUALITY**: Organized test structure with individual files per registry\n\n### v1.2.3\n- **FIXED**: GitHub API rate limit issues in CI by skipping GitHub-dependent tests\n- **IMPROVED**: CI reliability - 47 tests pass, 15 appropriately skipped in CI environment\n- **ENHANCED**: Maintains full test coverage locally while ensuring green CI builds\n- **QUALITY**: Resolves PyPI publish workflow failures caused by rate limiting\n- All features from v1.2.2 included with CI reliability improvements\n\n### v1.2.2\n- **FIXED**: Black code formatting compliance for nf-core functions\n- **IMPROVED**: CI/CD pipeline reliability with direct test execution in publish workflow\n- **ENHANCED**: Eliminated race condition between CI status checking and PyPI publish\n- All features from v1.2.1 included with formatting fixes\n\n### v1.2.1\n- **NEW**: Added support for nf-core modules and subworkflows:\n  - **nf-core modules** - `nf-core-module`, `nfcore-module`, `nf-module`\n  - **nf-core subworkflows** - `nf-core-subworkflow`, `nfcore-subworkflow`, `nf-subworkflow`\n- **NEW**: Registry-specific MCP tools:\n  - `get_nfcore_module(module_name)` for nf-core modules\n  - `get_nfcore_subworkflow(subworkflow_name)` for nf-core subworkflows\n- **IMPROVED**: Enhanced Nextflow ecosystem coverage for scientific computing\n- **IMPROVED**: Updated documentation with nf-core module/subworkflow examples\n- **QUALITY**: 62 comprehensive tests - all passing \u2705\n- **QUALITY**: Full backward compatibility maintained\n\n### v1.2.0\n- **NEW**: Added support for 6 additional package registries:\n  - PHP Composer (Packagist) - `composer`, `php`, `packagist`\n  - .NET NuGet - `nuget`, `dotnet`, `.net`\n  - Homebrew - `homebrew`, `brew`\n  - Nextflow (nf-core) - `nextflow`, `nf-core`\n  - Swift Package Manager - `swift`, `spm`\n  - Maven Central - `maven`, `mvn`\n- **NEW**: Registry-specific MCP tools for all new package managers\n- **IMPROVED**: Enhanced vmcp test client with examples for all 17 registries\n- **IMPROVED**: Comprehensive documentation updates with new API endpoints\n- **IMPROVED**: Updated error messages and validation for new registries\n- **QUALITY**: 56 comprehensive tests - all passing \u2705\n- **QUALITY**: Full backward compatibility maintained\n\n### v1.1.0\n- **NEW**: Added support for 7 additional package registries:\n  - Rust (crates.io) - `rust`, `cargo`, `crates`\n  - Bioconda (anaconda.org) - `bioconda`, `conda`\n  - R (CRAN) - `r`, `cran`\n  - Terraform Registry - `terraform`, `tf`\n  - DockerHub - `docker`, `dockerhub`\n  - Perl (CPAN) - `perl`, `cpan`\n  - Go Modules - `go`, `golang`\n- **NEW**: Added `vmcp` command-line test client\n- **NEW**: Registry-specific MCP tools for each package manager\n- **IMPROVED**: Enhanced documentation with comprehensive examples\n- **IMPROVED**: Updated error messages and validation\n\n### v1.0.0\n- Initial release\n- Support for npm, RubyGems, PyPI, and Hex.pm\n- Optimized for Claude Desktop integration\n- uvx and pipx support\n- Comprehensive error handling\n- MCP protocol compliance\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "An MCP server that queries package registries across 19 different ecosystems for latest package versions",
    "version": "1.3.1",
    "project_urls": {
        "Homepage": "https://github.com/trianglegrrl/versionator-mcp",
        "Issues": "https://github.com/trianglegrrl/versionator-mcp/issues",
        "Repository": "https://github.com/trianglegrrl/versionator-mcp.git"
    },
    "split_keywords": [
        "mcp",
        " model-context-protocol",
        " package-manager",
        " npm",
        " pypi",
        " rubygems",
        " hex"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "076955e1bf3369647355a8dfff2eb724ed2e01bea578ca7890020b7cd829c328",
                "md5": "cbbdc0d60726a515b94def8f7624b164",
                "sha256": "2962bb6ab35b07394228951b1058ed2a0ebf63ca67f0ddb49518d26396c28800"
            },
            "downloads": -1,
            "filename": "versionator_mcp-1.3.1-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "cbbdc0d60726a515b94def8f7624b164",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.10",
            "size": 35355,
            "upload_time": "2025-08-20T10:28:37",
            "upload_time_iso_8601": "2025-08-20T10:28:37.713795Z",
            "url": "https://files.pythonhosted.org/packages/07/69/55e1bf3369647355a8dfff2eb724ed2e01bea578ca7890020b7cd829c328/versionator_mcp-1.3.1-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "e99ba97938143332b4c33f66c24b4c8910f44f330a594a8e30e637121233c490",
                "md5": "b8343f43f9bc1703afe82ec2a59b7c7b",
                "sha256": "ea21373b904e3e66425c7e65b22bc73bbcb4887149002b09e35c92666f9b0e09"
            },
            "downloads": -1,
            "filename": "versionator_mcp-1.3.1.tar.gz",
            "has_sig": false,
            "md5_digest": "b8343f43f9bc1703afe82ec2a59b7c7b",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.10",
            "size": 52988,
            "upload_time": "2025-08-20T10:28:39",
            "upload_time_iso_8601": "2025-08-20T10:28:39.485941Z",
            "url": "https://files.pythonhosted.org/packages/e9/9b/a97938143332b4c33f66c24b4c8910f44f330a594a8e30e637121233c490/versionator_mcp-1.3.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-08-20 10:28:39",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "trianglegrrl",
    "github_project": "versionator-mcp",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "requirements": [
        {
            "name": "fastmcp",
            "specs": [
                [
                    ">=",
                    "2.11.3"
                ]
            ]
        },
        {
            "name": "aiohttp",
            "specs": [
                [
                    ">=",
                    "3.8.0"
                ]
            ]
        },
        {
            "name": "pydantic",
            "specs": [
                [
                    ">=",
                    "2.0.0"
                ]
            ]
        }
    ],
    "lcname": "versionator-mcp"
}
        
Elapsed time: 1.81509s