# Versionator MCP Server
[](https://github.com/trianglegrrl/versionator-mcp/actions/workflows/ci.yml)
[](https://badge.fury.io/py/versionator-mcp)
[](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[](https://github.com/trianglegrrl/versionator-mcp/actions/workflows/ci.yml)\n[](https://badge.fury.io/py/versionator-mcp)\n[](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"
}