From e6f66dc9313a993c688e9f37904d582f97b984a0 Mon Sep 17 00:00:00 2001 From: Ryan Malloy Date: Wed, 16 Jul 2025 21:49:38 -0600 Subject: [PATCH] Refactor package name from vultr-dns-mcp to mcp-vultr MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Rename package from vultr-dns-mcp to mcp-vultr for MCP organization - Update module name from vultr_dns_mcp to mcp_vultr throughout codebase - Rename src/vultr_dns_mcp/ to src/mcp_vultr/ - Update all import statements and references in Python files - Update documentation files (README.md, CLAUDE.md, etc.) - Update CLI script names in pyproject.toml - Update test files with new import paths ๐Ÿค– Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- BUILD.md | 16 +++--- CLAUDE.md | 26 +++++----- CLAUDE_DESKTOP_SETUP.md | 20 ++++---- PYPI_PUBLISHING.md | 24 ++++----- README.md | 46 ++++++++--------- TESTING.md | 4 +- examples.py | 4 +- pyproject.toml | 14 +++--- run_tests.py | 6 +-- src/{vultr_dns_mcp => mcp_vultr}/__init__.py | 2 +- src/{vultr_dns_mcp => mcp_vultr}/__main__.py | 0 src/{vultr_dns_mcp => mcp_vultr}/_version.py | 0 src/{vultr_dns_mcp => mcp_vultr}/cli.py | 0 src/{vultr_dns_mcp => mcp_vultr}/client.py | 0 .../fastmcp_server.py | 0 src/{vultr_dns_mcp => mcp_vultr}/py.typed | 0 src/{vultr_dns_mcp => mcp_vultr}/server.py | 0 sync_version.py | 8 +-- test_improvements.py | 4 +- tests/__init__.py | 2 +- tests/conftest.py | 4 +- tests/test_cli.py | 48 +++++++++--------- tests/test_client.py | 50 +++++++++---------- tests/test_mcp_server.py | 26 +++++----- tests/test_package_validation.py | 18 +++---- tests/test_server.py | 6 +-- tests/test_vultr_server.py | 2 +- 27 files changed, 165 insertions(+), 165 deletions(-) rename src/{vultr_dns_mcp => mcp_vultr}/__init__.py (95%) rename src/{vultr_dns_mcp => mcp_vultr}/__main__.py (100%) rename src/{vultr_dns_mcp => mcp_vultr}/_version.py (100%) rename src/{vultr_dns_mcp => mcp_vultr}/cli.py (100%) rename src/{vultr_dns_mcp => mcp_vultr}/client.py (100%) rename src/{vultr_dns_mcp => mcp_vultr}/fastmcp_server.py (100%) rename src/{vultr_dns_mcp => mcp_vultr}/py.typed (100%) rename src/{vultr_dns_mcp => mcp_vultr}/server.py (100%) diff --git a/BUILD.md b/BUILD.md index cd65def..847fe16 100644 --- a/BUILD.md +++ b/BUILD.md @@ -1,6 +1,6 @@ # Building and Publishing to PyPI -This document provides instructions for building and publishing the `vultr-dns-mcp` package to PyPI. +This document provides instructions for building and publishing the `mcp-vultr` package to PyPI. ## Prerequisites @@ -43,8 +43,8 @@ This document provides instructions for building and publishing the `vultr-dns-m ``` This creates: - - `dist/vultr_dns_mcp-1.0.0-py3-none-any.whl` (wheel) - - `dist/vultr-dns-mcp-1.0.0.tar.gz` (source distribution) + - `dist/mcp_vultr-1.0.0-py3-none-any.whl` (wheel) + - `dist/mcp-vultr-1.0.0.tar.gz` (source distribution) 3. **Verify the build:** ```bash @@ -60,13 +60,13 @@ This document provides instructions for building and publishing the `vultr-dns-m 2. **Test installation from TestPyPI:** ```bash - pip install --index-url https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple vultr-dns-mcp + pip install --index-url https://test.pypi.org/simple/ --extra-index-url https://pypi.org/simple mcp-vultr ``` 3. **Test functionality:** ```bash - vultr-dns-mcp --help - python -c "from vultr_dns_mcp import VultrDNSClient; print('Import successful')" + mcp-vultr --help + python -c "from mcp_vultr import VultrDNSClient; print('Import successful')" ``` ## Publishing to PyPI @@ -77,8 +77,8 @@ This document provides instructions for building and publishing the `vultr-dns-m ``` 2. **Verify publication:** - - Check the package page: https://pypi.org/project/vultr-dns-mcp/ - - Test installation: `pip install vultr-dns-mcp` + - Check the package page: https://pypi.org/project/mcp-vultr/ + - Test installation: `pip install mcp-vultr` ## Version Management diff --git a/CLAUDE.md b/CLAUDE.md index 8fd9701..c47b5e6 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -11,22 +11,22 @@ This package provides both an MCP server and a standalone Python client for Vult ### Installation ```bash # Using uv (recommended) -uv add vultr-dns-mcp +uv add mcp-vultr # Or using pip -pip install vultr-dns-mcp +pip install mcp-vultr ``` ### Basic Usage ```bash # CLI - requires VULTR_API_KEY environment variable -vultr-dns-mcp domains list -vultr-dns-mcp records list example.com +mcp-vultr domains list +mcp-vultr records list example.com # As MCP server vultr-mcp-server # or using Python module -python -m vultr_dns_mcp +python -m mcp_vultr ``` ## Development Setup @@ -51,7 +51,7 @@ uv run pytest -m mcp uv run pytest -m integration # With coverage -uv run pytest --cov=vultr_dns_mcp --cov-report=html +uv run pytest --cov=mcp_vultr --cov-report=html # Comprehensive test runner uv run python run_tests.py --all-checks @@ -116,8 +116,8 @@ Following FastMCP testing best practices: ## Project Structure ``` -vultr-dns-mcp/ -โ”œโ”€โ”€ src/vultr_dns_mcp/ +mcp-vultr/ +โ”œโ”€โ”€ src/mcp_vultr/ โ”‚ โ”œโ”€โ”€ __init__.py # Package initialization with exports โ”‚ โ”œโ”€โ”€ __main__.py # Module entry point for python -m โ”‚ โ”œโ”€โ”€ client.py # High-level DNS client @@ -252,18 +252,18 @@ uv run pytest tests/test_mcp_server.py::TestMCPTools::test_list_dns_domains_tool uv run pytest --collect-only tests/ # Validate imports -uv run python -c "from vultr_dns_mcp.server import create_mcp_server" +uv run python -c "from mcp_vultr.server import create_mcp_server" # Traditional approach pytest tests/test_mcp_server.py::TestMCPTools::test_list_dns_domains_tool -vvv pytest --collect-only tests/ -python -c "from vultr_dns_mcp.server import create_mcp_server" +python -c "from mcp_vultr.server import create_mcp_server" ``` ## Claude Desktop Integration ### Quick Setup -1. Install the package: `pip install vultr-dns-mcp` +1. Install the package: `pip install mcp-vultr` 2. Add to Claude Desktop config (`~/Library/Application Support/Claude/claude_desktop_config.json` on macOS): ```json { @@ -284,7 +284,7 @@ For detailed setup instructions, see `CLAUDE_DESKTOP_SETUP.md`. ## Support & Documentation -- **GitHub**: https://github.com/rsp2k/vultr-dns-mcp -- **PyPI**: https://pypi.org/project/vultr-dns-mcp/ +- **GitHub**: https://github.com/rsp2k/mcp-vultr +- **PyPI**: https://pypi.org/project/mcp-vultr/ - **Documentation**: Complete API documentation and examples in package - **Issues**: Use GitHub Issues for bug reports and feature requests \ No newline at end of file diff --git a/CLAUDE_DESKTOP_SETUP.md b/CLAUDE_DESKTOP_SETUP.md index 4b27a95..ca570c8 100644 --- a/CLAUDE_DESKTOP_SETUP.md +++ b/CLAUDE_DESKTOP_SETUP.md @@ -12,7 +12,7 @@ This guide shows how to set up and test the Vultr DNS MCP package locally with C ### Option 1: Install from PyPI (Recommended) ```bash -pip install vultr-dns-mcp +pip install mcp-vultr ``` ### Option 2: Install from Local Development @@ -23,7 +23,7 @@ pip install -e . ### Option 3: Using uv (Fastest) ```bash -uv add vultr-dns-mcp +uv add mcp-vultr ``` ## Claude Desktop Configuration @@ -61,7 +61,7 @@ Add this to your `claude_desktop_config.json`: "mcpServers": { "vultr-dns": { "command": "python", - "args": ["-m", "vultr_dns_mcp"], + "args": ["-m", "mcp_vultr"], "env": { "VULTR_API_KEY": "YOUR_VULTR_API_KEY_HERE" } @@ -96,7 +96,7 @@ This approach uses `uvx` to automatically install and run the package without ne "vultr-dns": { "command": "uvx", "args": [ - "--from", "vultr-dns-mcp", + "--from", "mcp-vultr", "vultr-mcp-server" ], "env": { @@ -117,7 +117,7 @@ For TestPyPI version: "--index-url", "https://test.pypi.org/simple/", "--extra-index-url", "https://pypi.org/simple/", "--index-strategy", "unsafe-best-match", - "--from", "vultr-dns-mcp==1.0.1", + "--from", "mcp-vultr==1.0.1", "vultr-mcp-server" ], "env": { @@ -137,7 +137,7 @@ If you have issues, use the absolute path to your Python installation: "mcpServers": { "vultr-dns": { "command": "/usr/bin/python3", - "args": ["-m", "vultr_dns_mcp"], + "args": ["-m", "mcp_vultr"], "env": { "VULTR_API_KEY": "YOUR_VULTR_API_KEY_HERE" } @@ -203,7 +203,7 @@ The server provides these tools that Claude Desktop can use: 1. **Check Python installation**: ```bash - python -c "import vultr_dns_mcp; print('โœ… Package installed')" + python -c "import mcp_vultr; print('โœ… Package installed')" ``` 2. **Test server manually**: @@ -211,14 +211,14 @@ The server provides these tools that Claude Desktop can use: export VULTR_API_KEY="your-key" vultr-mcp-server # or - python -m vultr_dns_mcp + python -m mcp_vultr ``` 3. **Check API key**: ```bash export VULTR_API_KEY="your-key" python -c " - from vultr_dns_mcp.client import VultrDNSClient + from mcp_vultr.client import VultrDNSClient import asyncio async def test(): client = VultrDNSClient() @@ -245,7 +245,7 @@ If Claude Desktop can't find Python: "mcpServers": { "vultr-dns": { "command": "/full/path/to/python3", - "args": ["-m", "vultr_dns_mcp"], + "args": ["-m", "mcp_vultr"], "env": { "VULTR_API_KEY": "YOUR_KEY" } diff --git a/PYPI_PUBLISHING.md b/PYPI_PUBLISHING.md index 09f8b66..ba90d33 100644 --- a/PYPI_PUBLISHING.md +++ b/PYPI_PUBLISHING.md @@ -1,6 +1,6 @@ # PyPI Publishing Setup Guide -This guide explains how to set up and use the automated PyPI publishing workflow for the `vultr-dns-mcp` package. +This guide explains how to set up and use the automated PyPI publishing workflow for the `mcp-vultr` package. ## ๐Ÿ” Setting Up Trusted Publishing (Recommended) @@ -8,29 +8,29 @@ The workflow uses [PyPI's trusted publishing](https://docs.pypi.org/trusted-publ ### For PyPI (Production) -1. **Go to your project on PyPI**: https://pypi.org/manage/project/vultr-dns-mcp/ +1. **Go to your project on PyPI**: https://pypi.org/manage/project/mcp-vultr/ 2. **Navigate to "Publishing"** tab 3. **Add a new trusted publisher** with these settings: - - **PyPI Project Name**: `vultr-dns-mcp` + - **PyPI Project Name**: `mcp-vultr` - **Owner**: `rsp2k` - - **Repository name**: `vultr-dns-mcp` + - **Repository name**: `mcp-vultr` - **Workflow filename**: `publish.yml` - **Environment name**: `pypi` ### For TestPyPI (Testing) -1. **Go to TestPyPI**: https://test.pypi.org/manage/project/vultr-dns-mcp/ +1. **Go to TestPyPI**: https://test.pypi.org/manage/project/mcp-vultr/ 2. **Navigate to "Publishing"** tab 3. **Add a new trusted publisher** with these settings: - - **PyPI Project Name**: `vultr-dns-mcp` + - **PyPI Project Name**: `mcp-vultr` - **Owner**: `rsp2k` - - **Repository name**: `vultr-dns-mcp` + - **Repository name**: `mcp-vultr` - **Workflow filename**: `publish.yml` - **Environment name**: `testpypi` ### GitHub Environment Setup -1. **Go to your repository settings**: https://github.com/rsp2k/vultr-dns-mcp/settings/environments +1. **Go to your repository settings**: https://github.com/rsp2k/mcp-vultr/settings/environments 2. **Create two environments**: - `pypi` (for production releases) - `testpypi` (for testing) @@ -43,7 +43,7 @@ The workflow uses [PyPI's trusted publishing](https://docs.pypi.org/trusted-publ 1. **Update the version** in `pyproject.toml`: ```toml [project] - name = "vultr-dns-mcp" + name = "mcp-vultr" version = "1.0.2" # Increment this ``` @@ -185,9 +185,9 @@ python -m twine check dist/* ## ๐Ÿ“Š Monitoring After publishing, monitor: -- **PyPI downloads**: https://pypistats.org/packages/vultr-dns-mcp -- **GitHub releases**: https://github.com/rsp2k/vultr-dns-mcp/releases -- **Actions logs**: https://github.com/rsp2k/vultr-dns-mcp/actions +- **PyPI downloads**: https://pypistats.org/packages/mcp-vultr +- **GitHub releases**: https://github.com/rsp2k/mcp-vultr/releases +- **Actions logs**: https://github.com/rsp2k/mcp-vultr/actions ## ๐ŸŽฏ Next Steps diff --git a/README.md b/README.md index a7ec4b9..170a8a7 100644 --- a/README.md +++ b/README.md @@ -22,10 +22,10 @@ A comprehensive Model Context Protocol (MCP) server for managing Vultr DNS recor ```bash # Using uv (recommended - fast and modern) -uv add vultr-dns-mcp +uv add mcp-vultr # Or using pip -pip install vultr-dns-mcp +pip install mcp-vultr ``` ### Basic Usage @@ -35,23 +35,23 @@ pip install vultr-dns-mcp export VULTR_API_KEY="your-api-key" # List domains -vultr-dns-mcp domains list +mcp-vultr domains list # List DNS records -vultr-dns-mcp records list example.com +mcp-vultr records list example.com # Set up basic website DNS -vultr-dns-mcp setup-website example.com 192.168.1.100 +mcp-vultr setup-website example.com 192.168.1.100 # Run as MCP server -uv run python -m vultr_dns_mcp.server +uv run python -m mcp_vultr.server ``` ### Python API ```python import asyncio -from vultr_dns_mcp import VultrDNSClient +from mcp_vultr import VultrDNSClient async def main(): client = VultrDNSClient("your-api-key") @@ -75,7 +75,7 @@ asyncio.run(main()) This package provides a complete MCP server that can be integrated with MCP-compatible clients: ```python -from vultr_dns_mcp import create_mcp_server, run_server +from mcp_vultr import create_mcp_server, run_server # Create server server = create_mcp_server("your-api-key") @@ -96,8 +96,8 @@ await run_server("your-api-key") ```bash # Clone the repository -git clone https://github.com/rsp2k/vultr-dns-mcp.git -cd vultr-dns-mcp +git clone https://github.com/rsp2k/mcp-vultr.git +cd mcp-vultr # Install dependencies uv sync --extra dev @@ -153,21 +153,21 @@ python run_tests.py --all-checks ```bash # Domain management -vultr-dns-mcp domains list -vultr-dns-mcp domains info example.com -vultr-dns-mcp domains create newdomain.com 192.168.1.100 +mcp-vultr domains list +mcp-vultr domains info example.com +mcp-vultr domains create newdomain.com 192.168.1.100 # Record management -vultr-dns-mcp records list example.com -vultr-dns-mcp records add example.com A www 192.168.1.100 -vultr-dns-mcp records delete example.com record-id +mcp-vultr records list example.com +mcp-vultr records add example.com A www 192.168.1.100 +mcp-vultr records delete example.com record-id # Setup utilities -vultr-dns-mcp setup-website example.com 192.168.1.100 -vultr-dns-mcp setup-email example.com mail.example.com +mcp-vultr setup-website example.com 192.168.1.100 +mcp-vultr setup-email example.com mail.example.com # Start MCP server -vultr-dns-mcp server +mcp-vultr server ``` ## Testing @@ -184,7 +184,7 @@ uv run pytest -m integration # Integration tests uv run pytest -m mcp # MCP-specific tests # With coverage -uv run pytest --cov=vultr_dns_mcp --cov-report=html +uv run pytest --cov=mcp_vultr --cov-report=html # Full validation suite uv run python run_tests.py --all-checks @@ -205,7 +205,7 @@ uv run python run_tests.py --all-checks The package provides specific exception types for better error handling: ```python -from vultr_dns_mcp import ( +from mcp_vultr import ( VultrAPIError, VultrAuthError, VultrRateLimitError, @@ -246,8 +246,8 @@ This project is licensed under the MIT License - see the [LICENSE](LICENSE) file ## Links -- [GitHub Repository](https://github.com/rsp2k/vultr-dns-mcp) -- [PyPI Package](https://pypi.org/project/vultr-dns-mcp/) +- [GitHub Repository](https://github.com/rsp2k/mcp-vultr) +- [PyPI Package](https://pypi.org/project/mcp-vultr/) - [Vultr API Documentation](https://www.vultr.com/api/) - [Model Context Protocol](https://modelcontextprotocol.io/) - [uv Package Manager](https://docs.astral.sh/uv/) \ No newline at end of file diff --git a/TESTING.md b/TESTING.md index 392fe16..7fe89da 100644 --- a/TESTING.md +++ b/TESTING.md @@ -116,7 +116,7 @@ uv run pytest -m mcp uv run pytest -m "not slow" # With coverage -uv run pytest --cov=vultr_dns_mcp --cov-report=html +uv run pytest --cov=mcp_vultr --cov-report=html ``` ### Using the test runner: @@ -163,7 +163,7 @@ testpaths = ["tests"] addopts = [ "--strict-markers", "--verbose", - "--cov=vultr_dns_mcp", + "--cov=mcp_vultr", "--cov-fail-under=80" ] asyncio_mode = "auto" diff --git a/examples.py b/examples.py index 1365819..0474d92 100644 --- a/examples.py +++ b/examples.py @@ -11,7 +11,7 @@ This script demonstrates various ways to use the package: import asyncio import os -from vultr_dns_mcp import VultrDNSClient, VultrDNSServer, create_mcp_server +from mcp_vultr import VultrDNSClient, VultrDNSServer, create_mcp_server async def client_example(): @@ -82,7 +82,7 @@ async def validation_example(): print("=" * 40) # Import the validation from the server module - from vultr_dns_mcp.server import create_mcp_server + from mcp_vultr.server import create_mcp_server # Create a test server instance for validation (won't make API calls) try: diff --git a/pyproject.toml b/pyproject.toml index 02d0d15..dc805e1 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,7 +3,7 @@ requires = ["setuptools>=61.0", "wheel"] build-backend = "setuptools.build_meta" [project] -name = "vultr-dns-mcp" +name = "mcp-vultr" version = "1.1.0" description = "A comprehensive Model Context Protocol (MCP) server for managing Vultr DNS records" readme = "README.md" @@ -80,15 +80,15 @@ Repository = "https://github.com/rsp2k/vultr-dns-mcp.git" Changelog = "https://github.com/rsp2k/vultr-dns-mcp/blob/main/CHANGELOG.md" [project.scripts] -vultr-dns-mcp = "vultr_dns_mcp.cli:main" -vultr-dns-server = "vultr_dns_mcp.cli:server_command" -vultr-mcp-server = "vultr_dns_mcp.fastmcp_server:run_server" +mcp-vultr = "mcp_vultr.cli:main" +vultr-dns-server = "mcp_vultr.cli:server_command" +vultr-mcp-server = "mcp_vultr.fastmcp_server:run_server" [tool.setuptools.packages.find] where = ["src"] [tool.setuptools.package-data] -vultr_dns_mcp = ["py.typed"] +mcp_vultr = ["py.typed"] [tool.black] line-length = 88 @@ -112,7 +112,7 @@ extend-exclude = ''' profile = "black" multi_line_output = 3 line_length = 88 -known_first_party = ["vultr_dns_mcp"] +known_first_party = ["mcp_vultr"] [tool.mypy] python_version = "3.10" @@ -163,7 +163,7 @@ filterwarnings = [ ] [tool.coverage.run] -source = ["src/vultr_dns_mcp"] +source = ["src/mcp_vultr"] omit = [ "*/tests/*", "*/test_*", diff --git a/run_tests.py b/run_tests.py index ca33504..3f7b1f1 100644 --- a/run_tests.py +++ b/run_tests.py @@ -29,7 +29,7 @@ def run_tests(test_type="all", verbose=False, coverage=False, fast=False): # Add coverage if requested if coverage: - cmd.extend(["--cov=vultr_dns_mcp", "--cov-report=term-missing", "--cov-report=html"]) + cmd.extend(["--cov=mcp_vultr", "--cov-report=term-missing", "--cov-report=html"]) # Select tests based on type if test_type == "unit": @@ -130,8 +130,8 @@ def run_package_validation(): sys.path.insert(0, str(src_path)) # Test main imports - from vultr_dns_mcp import VultrDNSClient, VultrDNSServer, create_mcp_server - from vultr_dns_mcp._version import __version__ + from mcp_vultr import VultrDNSClient, VultrDNSServer, create_mcp_server + from mcp_vultr._version import __version__ print(f" โœ… Package imports successful (version {__version__})") diff --git a/src/vultr_dns_mcp/__init__.py b/src/mcp_vultr/__init__.py similarity index 95% rename from src/vultr_dns_mcp/__init__.py rename to src/mcp_vultr/__init__.py index 82230e5..fc192be 100644 --- a/src/vultr_dns_mcp/__init__.py +++ b/src/mcp_vultr/__init__.py @@ -6,7 +6,7 @@ the Vultr API. It includes tools for domain management, DNS record operations, configuration analysis, and validation. Example usage: - from vultr_dns_mcp import VultrDNSServer, create_mcp_server + from mcp_vultr import VultrDNSServer, create_mcp_server # Create a server instance server = VultrDNSServer(api_key="your-api-key") diff --git a/src/vultr_dns_mcp/__main__.py b/src/mcp_vultr/__main__.py similarity index 100% rename from src/vultr_dns_mcp/__main__.py rename to src/mcp_vultr/__main__.py diff --git a/src/vultr_dns_mcp/_version.py b/src/mcp_vultr/_version.py similarity index 100% rename from src/vultr_dns_mcp/_version.py rename to src/mcp_vultr/_version.py diff --git a/src/vultr_dns_mcp/cli.py b/src/mcp_vultr/cli.py similarity index 100% rename from src/vultr_dns_mcp/cli.py rename to src/mcp_vultr/cli.py diff --git a/src/vultr_dns_mcp/client.py b/src/mcp_vultr/client.py similarity index 100% rename from src/vultr_dns_mcp/client.py rename to src/mcp_vultr/client.py diff --git a/src/vultr_dns_mcp/fastmcp_server.py b/src/mcp_vultr/fastmcp_server.py similarity index 100% rename from src/vultr_dns_mcp/fastmcp_server.py rename to src/mcp_vultr/fastmcp_server.py diff --git a/src/vultr_dns_mcp/py.typed b/src/mcp_vultr/py.typed similarity index 100% rename from src/vultr_dns_mcp/py.typed rename to src/mcp_vultr/py.typed diff --git a/src/vultr_dns_mcp/server.py b/src/mcp_vultr/server.py similarity index 100% rename from src/vultr_dns_mcp/server.py rename to src/mcp_vultr/server.py diff --git a/sync_version.py b/sync_version.py index f5f425f..a4f995a 100644 --- a/sync_version.py +++ b/sync_version.py @@ -3,7 +3,7 @@ Version synchronization script for vultr-dns-mcp. This script ensures that the version number in pyproject.toml -and src/vultr_dns_mcp/_version.py are kept in sync. +and src/mcp_vultr/_version.py are kept in sync. Usage: python sync_version.py # Check if versions are in sync @@ -40,9 +40,9 @@ def get_version_from_pyproject() -> str: def get_version_from_version_py() -> str: """Get version from _version.py.""" - version_path = Path("src/vultr_dns_mcp/_version.py") + version_path = Path("src/mcp_vultr/_version.py") if not version_path.exists(): - raise FileNotFoundError("src/vultr_dns_mcp/_version.py not found") + raise FileNotFoundError("src/mcp_vultr/_version.py not found") with open(version_path, "r") as f: content = f.read() @@ -56,7 +56,7 @@ def get_version_from_version_py() -> str: def update_version_py(new_version: str) -> None: """Update version in _version.py.""" - version_path = Path("src/vultr_dns_mcp/_version.py") + version_path = Path("src/mcp_vultr/_version.py") content = f'''"""Version information for vultr-dns-mcp package.""" diff --git a/test_improvements.py b/test_improvements.py index 7709c32..6b4b15e 100644 --- a/test_improvements.py +++ b/test_improvements.py @@ -2,7 +2,7 @@ """Test our improvements to the Vultr DNS MCP package.""" import ipaddress -from vultr_dns_mcp.server import ( +from mcp_vultr.server import ( VultrAPIError, VultrAuthError, VultrRateLimitError, @@ -79,7 +79,7 @@ def test_mcp_server_creation(): print("๐Ÿงช Testing MCP Server Creation:") try: - from vultr_dns_mcp.server import create_mcp_server + from mcp_vultr.server import create_mcp_server # This should fail without API key (expected) try: diff --git a/tests/__init__.py b/tests/__init__.py index fc56a99..4bcccb3 100644 --- a/tests/__init__.py +++ b/tests/__init__.py @@ -1 +1 @@ -"""Tests for vultr_dns_mcp package.""" +"""Tests for mcp_vultr package.""" diff --git a/tests/conftest.py b/tests/conftest.py index 34d1c05..e88131b 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -3,7 +3,7 @@ import os import pytest from unittest.mock import AsyncMock, MagicMock -from vultr_dns_mcp.server import create_mcp_server +from mcp_vultr.server import create_mcp_server @pytest.fixture @@ -21,7 +21,7 @@ def mcp_server(mock_api_key): @pytest.fixture def mock_vultr_client(): """Create a mock VultrDNSServer for testing API interactions.""" - from vultr_dns_mcp.server import VultrDNSServer + from mcp_vultr.server import VultrDNSServer mock_client = AsyncMock(spec=VultrDNSServer) diff --git a/tests/test_cli.py b/tests/test_cli.py index 149c374..851b7a3 100644 --- a/tests/test_cli.py +++ b/tests/test_cli.py @@ -3,7 +3,7 @@ import pytest from unittest.mock import patch, AsyncMock, MagicMock from click.testing import CliRunner -from vultr_dns_mcp.cli import cli, main +from mcp_vultr.cli import cli, main @pytest.fixture @@ -92,7 +92,7 @@ class TestServerCommand: assert result.exit_code == 1 assert "VULTR_API_KEY is required" in result.output - @patch('vultr_dns_mcp.cli.run_server') + @patch('mcp_vultr.cli.run_server') def test_server_command_with_api_key(self, mock_run_server, cli_runner): """Test server command with API key.""" with patch.dict('os.environ', {'VULTR_API_KEY': 'test-key'}): @@ -103,7 +103,7 @@ class TestServerCommand: assert "Starting Vultr DNS MCP Server" in result.output mock_run_server.assert_called_once_with('test-key') - @patch('vultr_dns_mcp.cli.run_server') + @patch('mcp_vultr.cli.run_server') def test_server_command_with_error(self, mock_run_server, cli_runner): """Test server command with error.""" with patch.dict('os.environ', {'VULTR_API_KEY': 'test-key'}): @@ -118,7 +118,7 @@ class TestServerCommand: class TestDomainsCommands: """Test domain management commands.""" - @patch('vultr_dns_mcp.cli.VultrDNSClient') + @patch('mcp_vultr.cli.VultrDNSClient') def test_list_domains(self, mock_client_class, cli_runner, mock_client_for_cli): """Test domains list command.""" mock_client_class.return_value = mock_client_for_cli @@ -131,7 +131,7 @@ class TestDomainsCommands: assert "test.com" in result.output mock_client_for_cli.domains.assert_called_once() - @patch('vultr_dns_mcp.cli.VultrDNSClient') + @patch('mcp_vultr.cli.VultrDNSClient') def test_list_domains_empty(self, mock_client_class, cli_runner): """Test domains list command with no domains.""" mock_client = AsyncMock() @@ -144,7 +144,7 @@ class TestDomainsCommands: assert result.exit_code == 0 assert "No domains found" in result.output - @patch('vultr_dns_mcp.cli.VultrDNSClient') + @patch('mcp_vultr.cli.VultrDNSClient') def test_domain_info(self, mock_client_class, cli_runner, mock_client_for_cli): """Test domains info command.""" mock_client_class.return_value = mock_client_for_cli @@ -157,7 +157,7 @@ class TestDomainsCommands: assert "Total Records: 5" in result.output mock_client_for_cli.get_domain_summary.assert_called_once_with('example.com') - @patch('vultr_dns_mcp.cli.VultrDNSClient') + @patch('mcp_vultr.cli.VultrDNSClient') def test_domain_info_error(self, mock_client_class, cli_runner): """Test domains info command with error.""" mock_client = AsyncMock() @@ -170,7 +170,7 @@ class TestDomainsCommands: assert result.exit_code == 1 assert "Domain not found" in result.output - @patch('vultr_dns_mcp.cli.VultrDNSClient') + @patch('mcp_vultr.cli.VultrDNSClient') def test_create_domain(self, mock_client_class, cli_runner, mock_client_for_cli): """Test domains create command.""" mock_client_class.return_value = mock_client_for_cli @@ -182,7 +182,7 @@ class TestDomainsCommands: assert "Created domain newdomain.com" in result.output mock_client_for_cli.add_domain.assert_called_once_with('newdomain.com', '192.168.1.100') - @patch('vultr_dns_mcp.cli.VultrDNSClient') + @patch('mcp_vultr.cli.VultrDNSClient') def test_create_domain_error(self, mock_client_class, cli_runner): """Test domains create command with error.""" mock_client = AsyncMock() @@ -200,7 +200,7 @@ class TestDomainsCommands: class TestRecordsCommands: """Test DNS records commands.""" - @patch('vultr_dns_mcp.cli.VultrDNSClient') + @patch('mcp_vultr.cli.VultrDNSClient') def test_list_records(self, mock_client_class, cli_runner, mock_client_for_cli): """Test records list command.""" mock_client_class.return_value = mock_client_for_cli @@ -213,7 +213,7 @@ class TestRecordsCommands: assert "rec1" in result.output mock_client_for_cli.records.assert_called_once_with('example.com') - @patch('vultr_dns_mcp.cli.VultrDNSClient') + @patch('mcp_vultr.cli.VultrDNSClient') def test_list_records_filtered(self, mock_client_class, cli_runner, mock_client_for_cli): """Test records list command with type filter.""" mock_client_class.return_value = mock_client_for_cli @@ -224,7 +224,7 @@ class TestRecordsCommands: assert result.exit_code == 0 mock_client_for_cli.find_records_by_type.assert_called_once_with('example.com', 'A') - @patch('vultr_dns_mcp.cli.VultrDNSClient') + @patch('mcp_vultr.cli.VultrDNSClient') def test_list_records_empty(self, mock_client_class, cli_runner): """Test records list command with no records.""" mock_client = AsyncMock() @@ -237,7 +237,7 @@ class TestRecordsCommands: assert result.exit_code == 0 assert "No records found" in result.output - @patch('vultr_dns_mcp.cli.VultrDNSClient') + @patch('mcp_vultr.cli.VultrDNSClient') def test_add_record(self, mock_client_class, cli_runner, mock_client_for_cli): """Test records add command.""" mock_client_class.return_value = mock_client_for_cli @@ -253,7 +253,7 @@ class TestRecordsCommands: 'example.com', 'A', 'www', '192.168.1.100', None, None ) - @patch('vultr_dns_mcp.cli.VultrDNSClient') + @patch('mcp_vultr.cli.VultrDNSClient') def test_add_record_with_ttl_and_priority(self, mock_client_class, cli_runner, mock_client_for_cli): """Test records add command with TTL and priority.""" mock_client_class.return_value = mock_client_for_cli @@ -269,7 +269,7 @@ class TestRecordsCommands: 'example.com', 'MX', '@', 'mail.example.com', 600, 10 ) - @patch('vultr_dns_mcp.cli.VultrDNSClient') + @patch('mcp_vultr.cli.VultrDNSClient') def test_add_record_error(self, mock_client_class, cli_runner): """Test records add command with error.""" mock_client = AsyncMock() @@ -284,7 +284,7 @@ class TestRecordsCommands: assert result.exit_code == 1 assert "Invalid record" in result.output - @patch('vultr_dns_mcp.cli.VultrDNSClient') + @patch('mcp_vultr.cli.VultrDNSClient') def test_delete_record(self, mock_client_class, cli_runner, mock_client_for_cli): """Test records delete command.""" mock_client_class.return_value = mock_client_for_cli @@ -298,7 +298,7 @@ class TestRecordsCommands: assert "Deleted record record-123" in result.output mock_client_for_cli.remove_record.assert_called_once_with('example.com', 'record-123') - @patch('vultr_dns_mcp.cli.VultrDNSClient') + @patch('mcp_vultr.cli.VultrDNSClient') def test_delete_record_failure(self, mock_client_class, cli_runner): """Test records delete command failure.""" mock_client = AsyncMock() @@ -318,7 +318,7 @@ class TestRecordsCommands: class TestSetupCommands: """Test setup utility commands.""" - @patch('vultr_dns_mcp.cli.VultrDNSClient') + @patch('mcp_vultr.cli.VultrDNSClient') def test_setup_website(self, mock_client_class, cli_runner, mock_client_for_cli): """Test setup-website command.""" mock_client_class.return_value = mock_client_for_cli @@ -335,7 +335,7 @@ class TestSetupCommands: 'example.com', '192.168.1.100', True, None ) - @patch('vultr_dns_mcp.cli.VultrDNSClient') + @patch('mcp_vultr.cli.VultrDNSClient') def test_setup_website_no_www(self, mock_client_class, cli_runner, mock_client_for_cli): """Test setup-website command without www.""" mock_client_class.return_value = mock_client_for_cli @@ -350,7 +350,7 @@ class TestSetupCommands: 'example.com', '192.168.1.100', False, None ) - @patch('vultr_dns_mcp.cli.VultrDNSClient') + @patch('mcp_vultr.cli.VultrDNSClient') def test_setup_website_with_ttl(self, mock_client_class, cli_runner, mock_client_for_cli): """Test setup-website command with custom TTL.""" mock_client_class.return_value = mock_client_for_cli @@ -365,7 +365,7 @@ class TestSetupCommands: 'example.com', '192.168.1.100', True, 600 ) - @patch('vultr_dns_mcp.cli.VultrDNSClient') + @patch('mcp_vultr.cli.VultrDNSClient') def test_setup_website_with_errors(self, mock_client_class, cli_runner): """Test setup-website command with errors.""" mock_client = AsyncMock() @@ -384,7 +384,7 @@ class TestSetupCommands: assert result.exit_code == 0 assert "Setup completed with some errors" in result.output - @patch('vultr_dns_mcp.cli.VultrDNSClient') + @patch('mcp_vultr.cli.VultrDNSClient') def test_setup_email(self, mock_client_class, cli_runner, mock_client_for_cli): """Test setup-email command.""" mock_client_class.return_value = mock_client_for_cli @@ -401,7 +401,7 @@ class TestSetupCommands: 'example.com', 'mail.example.com', 10, None ) - @patch('vultr_dns_mcp.cli.VultrDNSClient') + @patch('mcp_vultr.cli.VultrDNSClient') def test_setup_email_custom_priority(self, mock_client_class, cli_runner, mock_client_for_cli): """Test setup-email command with custom priority.""" mock_client_class.return_value = mock_client_for_cli @@ -421,7 +421,7 @@ class TestSetupCommands: class TestCLIErrorHandling: """Test CLI error handling.""" - @patch('vultr_dns_mcp.cli.VultrDNSClient') + @patch('mcp_vultr.cli.VultrDNSClient') def test_api_exception_handling(self, mock_client_class, cli_runner): """Test CLI handling of API exceptions.""" mock_client = AsyncMock() diff --git a/tests/test_client.py b/tests/test_client.py index ecc5bce..224e011 100644 --- a/tests/test_client.py +++ b/tests/test_client.py @@ -2,7 +2,7 @@ import pytest from unittest.mock import AsyncMock, patch -from vultr_dns_mcp.client import VultrDNSClient +from mcp_vultr.client import VultrDNSClient @pytest.mark.unit @@ -18,7 +18,7 @@ class TestVultrDNSClient: @pytest.mark.asyncio async def test_domains_method(self, mock_api_key, mock_vultr_client): """Test the domains() method.""" - with patch('vultr_dns_mcp.client.VultrDNSServer', return_value=mock_vultr_client): + with patch('mcp_vultr.client.VultrDNSServer', return_value=mock_vultr_client): client = VultrDNSClient(mock_api_key) result = await client.domains() @@ -28,7 +28,7 @@ class TestVultrDNSClient: @pytest.mark.asyncio async def test_domain_method(self, mock_api_key, mock_vultr_client): """Test the domain() method.""" - with patch('vultr_dns_mcp.client.VultrDNSServer', return_value=mock_vultr_client): + with patch('mcp_vultr.client.VultrDNSServer', return_value=mock_vultr_client): client = VultrDNSClient(mock_api_key) result = await client.domain("example.com") @@ -38,7 +38,7 @@ class TestVultrDNSClient: @pytest.mark.asyncio async def test_add_domain_method(self, mock_api_key, mock_vultr_client): """Test the add_domain() method.""" - with patch('vultr_dns_mcp.client.VultrDNSServer', return_value=mock_vultr_client): + with patch('mcp_vultr.client.VultrDNSServer', return_value=mock_vultr_client): client = VultrDNSClient(mock_api_key) result = await client.add_domain("newdomain.com", "192.168.1.100") @@ -48,7 +48,7 @@ class TestVultrDNSClient: @pytest.mark.asyncio async def test_remove_domain_success(self, mock_api_key, mock_vultr_client): """Test successful domain removal.""" - with patch('vultr_dns_mcp.client.VultrDNSServer', return_value=mock_vultr_client): + with patch('mcp_vultr.client.VultrDNSServer', return_value=mock_vultr_client): client = VultrDNSClient(mock_api_key) result = await client.remove_domain("example.com") @@ -61,7 +61,7 @@ class TestVultrDNSClient: mock_client = AsyncMock() mock_client.delete_domain.side_effect = Exception("API Error") - with patch('vultr_dns_mcp.client.VultrDNSServer', return_value=mock_client): + with patch('mcp_vultr.client.VultrDNSServer', return_value=mock_client): client = VultrDNSClient(mock_api_key) result = await client.remove_domain("example.com") @@ -70,7 +70,7 @@ class TestVultrDNSClient: @pytest.mark.asyncio async def test_records_method(self, mock_api_key, mock_vultr_client): """Test the records() method.""" - with patch('vultr_dns_mcp.client.VultrDNSServer', return_value=mock_vultr_client): + with patch('mcp_vultr.client.VultrDNSServer', return_value=mock_vultr_client): client = VultrDNSClient(mock_api_key) result = await client.records("example.com") @@ -80,7 +80,7 @@ class TestVultrDNSClient: @pytest.mark.asyncio async def test_add_record_method(self, mock_api_key, mock_vultr_client): """Test the add_record() method.""" - with patch('vultr_dns_mcp.client.VultrDNSServer', return_value=mock_vultr_client): + with patch('mcp_vultr.client.VultrDNSServer', return_value=mock_vultr_client): client = VultrDNSClient(mock_api_key) result = await client.add_record("example.com", "A", "www", "192.168.1.100", 300) @@ -92,7 +92,7 @@ class TestVultrDNSClient: @pytest.mark.asyncio async def test_update_record_method(self, mock_api_key, mock_vultr_client): """Test the update_record() method.""" - with patch('vultr_dns_mcp.client.VultrDNSServer', return_value=mock_vultr_client): + with patch('mcp_vultr.client.VultrDNSServer', return_value=mock_vultr_client): client = VultrDNSClient(mock_api_key) result = await client.update_record( "example.com", "record-123", "A", "www", "192.168.1.200", 600 @@ -106,7 +106,7 @@ class TestVultrDNSClient: @pytest.mark.asyncio async def test_remove_record_success(self, mock_api_key, mock_vultr_client): """Test successful record removal.""" - with patch('vultr_dns_mcp.client.VultrDNSServer', return_value=mock_vultr_client): + with patch('mcp_vultr.client.VultrDNSServer', return_value=mock_vultr_client): client = VultrDNSClient(mock_api_key) result = await client.remove_record("example.com", "record-123") @@ -119,7 +119,7 @@ class TestVultrDNSClient: mock_client = AsyncMock() mock_client.delete_record.side_effect = Exception("API Error") - with patch('vultr_dns_mcp.client.VultrDNSServer', return_value=mock_client): + with patch('mcp_vultr.client.VultrDNSServer', return_value=mock_client): client = VultrDNSClient(mock_api_key) result = await client.remove_record("example.com", "record-123") @@ -133,7 +133,7 @@ class TestConvenienceMethods: @pytest.mark.asyncio async def test_add_a_record(self, mock_api_key, mock_vultr_client): """Test add_a_record convenience method.""" - with patch('vultr_dns_mcp.client.VultrDNSServer', return_value=mock_vultr_client): + with patch('mcp_vultr.client.VultrDNSServer', return_value=mock_vultr_client): client = VultrDNSClient(mock_api_key) result = await client.add_a_record("example.com", "www", "192.168.1.100", 300) @@ -145,7 +145,7 @@ class TestConvenienceMethods: @pytest.mark.asyncio async def test_add_aaaa_record(self, mock_api_key, mock_vultr_client): """Test add_aaaa_record convenience method.""" - with patch('vultr_dns_mcp.client.VultrDNSServer', return_value=mock_vultr_client): + with patch('mcp_vultr.client.VultrDNSServer', return_value=mock_vultr_client): client = VultrDNSClient(mock_api_key) result = await client.add_aaaa_record("example.com", "www", "2001:db8::1", 300) @@ -157,7 +157,7 @@ class TestConvenienceMethods: @pytest.mark.asyncio async def test_add_cname_record(self, mock_api_key, mock_vultr_client): """Test add_cname_record convenience method.""" - with patch('vultr_dns_mcp.client.VultrDNSServer', return_value=mock_vultr_client): + with patch('mcp_vultr.client.VultrDNSServer', return_value=mock_vultr_client): client = VultrDNSClient(mock_api_key) result = await client.add_cname_record("example.com", "www", "example.com", 300) @@ -169,7 +169,7 @@ class TestConvenienceMethods: @pytest.mark.asyncio async def test_add_mx_record(self, mock_api_key, mock_vultr_client): """Test add_mx_record convenience method.""" - with patch('vultr_dns_mcp.client.VultrDNSServer', return_value=mock_vultr_client): + with patch('mcp_vultr.client.VultrDNSServer', return_value=mock_vultr_client): client = VultrDNSClient(mock_api_key) result = await client.add_mx_record("example.com", "@", "mail.example.com", 10, 300) @@ -181,7 +181,7 @@ class TestConvenienceMethods: @pytest.mark.asyncio async def test_add_txt_record(self, mock_api_key, mock_vultr_client): """Test add_txt_record convenience method.""" - with patch('vultr_dns_mcp.client.VultrDNSServer', return_value=mock_vultr_client): + with patch('mcp_vultr.client.VultrDNSServer', return_value=mock_vultr_client): client = VultrDNSClient(mock_api_key) result = await client.add_txt_record("example.com", "@", "v=spf1 include:_spf.google.com ~all", 300) @@ -201,7 +201,7 @@ class TestUtilityMethods: mock_client = AsyncMock() mock_client.list_records.return_value = sample_records - with patch('vultr_dns_mcp.client.VultrDNSServer', return_value=mock_client): + with patch('mcp_vultr.client.VultrDNSServer', return_value=mock_client): client = VultrDNSClient(mock_api_key) result = await client.find_records_by_type("example.com", "A") @@ -214,7 +214,7 @@ class TestUtilityMethods: mock_client = AsyncMock() mock_client.list_records.return_value = sample_records - with patch('vultr_dns_mcp.client.VultrDNSServer', return_value=mock_client): + with patch('mcp_vultr.client.VultrDNSServer', return_value=mock_client): client = VultrDNSClient(mock_api_key) result = await client.find_records_by_name("example.com", "@") @@ -228,7 +228,7 @@ class TestUtilityMethods: mock_client.get_domain.return_value = {"domain": "example.com", "date_created": "2024-01-01"} mock_client.list_records.return_value = sample_records - with patch('vultr_dns_mcp.client.VultrDNSServer', return_value=mock_client): + with patch('mcp_vultr.client.VultrDNSServer', return_value=mock_client): client = VultrDNSClient(mock_api_key) result = await client.get_domain_summary("example.com") @@ -246,7 +246,7 @@ class TestUtilityMethods: mock_client = AsyncMock() mock_client.get_domain.side_effect = Exception("API Error") - with patch('vultr_dns_mcp.client.VultrDNSServer', return_value=mock_client): + with patch('mcp_vultr.client.VultrDNSServer', return_value=mock_client): client = VultrDNSClient(mock_api_key) result = await client.get_domain_summary("example.com") @@ -261,7 +261,7 @@ class TestSetupMethods: @pytest.mark.asyncio async def test_setup_basic_website_success(self, mock_api_key, mock_vultr_client): """Test successful website setup.""" - with patch('vultr_dns_mcp.client.VultrDNSServer', return_value=mock_vultr_client): + with patch('mcp_vultr.client.VultrDNSServer', return_value=mock_vultr_client): client = VultrDNSClient(mock_api_key) result = await client.setup_basic_website("example.com", "192.168.1.100", True, 300) @@ -275,7 +275,7 @@ class TestSetupMethods: @pytest.mark.asyncio async def test_setup_basic_website_no_www(self, mock_api_key, mock_vultr_client): """Test website setup without www subdomain.""" - with patch('vultr_dns_mcp.client.VultrDNSServer', return_value=mock_vultr_client): + with patch('mcp_vultr.client.VultrDNSServer', return_value=mock_vultr_client): client = VultrDNSClient(mock_api_key) result = await client.setup_basic_website("example.com", "192.168.1.100", False, 300) @@ -291,7 +291,7 @@ class TestSetupMethods: mock_client = AsyncMock() mock_client.create_record.side_effect = Exception("API Error") - with patch('vultr_dns_mcp.client.VultrDNSServer', return_value=mock_client): + with patch('mcp_vultr.client.VultrDNSServer', return_value=mock_client): client = VultrDNSClient(mock_api_key) result = await client.setup_basic_website("example.com", "192.168.1.100", True, 300) @@ -301,7 +301,7 @@ class TestSetupMethods: @pytest.mark.asyncio async def test_setup_email_success(self, mock_api_key, mock_vultr_client): """Test successful email setup.""" - with patch('vultr_dns_mcp.client.VultrDNSServer', return_value=mock_vultr_client): + with patch('mcp_vultr.client.VultrDNSServer', return_value=mock_vultr_client): client = VultrDNSClient(mock_api_key) result = await client.setup_email("example.com", "mail.example.com", 10, 300) @@ -320,7 +320,7 @@ class TestSetupMethods: mock_client = AsyncMock() mock_client.create_record.side_effect = Exception("API Error") - with patch('vultr_dns_mcp.client.VultrDNSServer', return_value=mock_client): + with patch('mcp_vultr.client.VultrDNSServer', return_value=mock_client): client = VultrDNSClient(mock_api_key) result = await client.setup_email("example.com", "mail.example.com", 10, 300) diff --git a/tests/test_mcp_server.py b/tests/test_mcp_server.py index 9845632..01d1685 100644 --- a/tests/test_mcp_server.py +++ b/tests/test_mcp_server.py @@ -4,7 +4,7 @@ import pytest from unittest.mock import patch, AsyncMock from mcp.client.session import ClientSession from mcp.client.stdio import stdio_client -from vultr_dns_mcp.server import VultrDNSServer, create_mcp_server +from mcp_vultr.server import VultrDNSServer, create_mcp_server class TestMCPServerBasics: @@ -36,7 +36,7 @@ class TestMCPTools: @pytest.mark.asyncio async def test_list_dns_domains_tool(self, mcp_server, mock_vultr_client): """Test the list_dns_domains MCP tool.""" - with patch('vultr_dns_mcp.server.VultrDNSServer', return_value=mock_vultr_client): + with patch('mcp_vultr.server.VultrDNSServer', return_value=mock_vultr_client): server = create_mcp_server("test-api-key") # For the official MCP package, we need to use ClientSession @@ -54,7 +54,7 @@ class TestMCPTools: @pytest.mark.asyncio async def test_get_dns_domain_tool(self, mcp_server, mock_vultr_client): """Test the get_dns_domain MCP tool.""" - with patch('vultr_dns_mcp.server.VultrDNSServer', return_value=mock_vultr_client): + with patch('mcp_vultr.server.VultrDNSServer', return_value=mock_vultr_client): server = create_mcp_server("test-api-key") async with ClientSession(server) as session: @@ -66,7 +66,7 @@ class TestMCPTools: @pytest.mark.asyncio async def test_create_dns_domain_tool(self, mcp_server, mock_vultr_client): """Test the create_dns_domain MCP tool.""" - with patch('vultr_dns_mcp.server.VultrDNSServer', return_value=mock_vultr_client): + with patch('mcp_vultr.server.VultrDNSServer', return_value=mock_vultr_client): server = create_mcp_server("test-api-key") async with ClientSession(server) as session: @@ -81,7 +81,7 @@ class TestMCPTools: @pytest.mark.asyncio async def test_delete_dns_domain_tool(self, mcp_server, mock_vultr_client): """Test the delete_dns_domain MCP tool.""" - with patch('vultr_dns_mcp.server.VultrDNSServer', return_value=mock_vultr_client): + with patch('mcp_vultr.server.VultrDNSServer', return_value=mock_vultr_client): server = create_mcp_server("test-api-key") async with ClientSession(server) as session: @@ -93,7 +93,7 @@ class TestMCPTools: @pytest.mark.asyncio async def test_list_dns_records_tool(self, mcp_server, mock_vultr_client): """Test the list_dns_records MCP tool.""" - with patch('vultr_dns_mcp.server.VultrDNSServer', return_value=mock_vultr_client): + with patch('mcp_vultr.server.VultrDNSServer', return_value=mock_vultr_client): server = create_mcp_server("test-api-key") async with ClientSession(server) as session: @@ -105,7 +105,7 @@ class TestMCPTools: @pytest.mark.asyncio async def test_create_dns_record_tool(self, mcp_server, mock_vultr_client): """Test the create_dns_record MCP tool.""" - with patch('vultr_dns_mcp.server.VultrDNSServer', return_value=mock_vultr_client): + with patch('mcp_vultr.server.VultrDNSServer', return_value=mock_vultr_client): server = create_mcp_server("test-api-key") async with ClientSession(server) as session: @@ -154,7 +154,7 @@ class TestMCPTools: @pytest.mark.asyncio async def test_analyze_dns_records_tool(self, mcp_server, mock_vultr_client): """Test the analyze_dns_records MCP tool.""" - with patch('vultr_dns_mcp.server.VultrDNSServer', return_value=mock_vultr_client): + with patch('mcp_vultr.server.VultrDNSServer', return_value=mock_vultr_client): server = create_mcp_server("test-api-key") async with ClientSession(server) as session: @@ -171,7 +171,7 @@ class TestMCPResources: @pytest.mark.asyncio async def test_domains_resource(self, mcp_server, mock_vultr_client): """Test the vultr://domains resource.""" - with patch('vultr_dns_mcp.server.VultrDNSServer', return_value=mock_vultr_client): + with patch('mcp_vultr.server.VultrDNSServer', return_value=mock_vultr_client): server = create_mcp_server("test-api-key") async with ClientSession(server) as session: @@ -193,7 +193,7 @@ class TestMCPResources: @pytest.mark.asyncio async def test_read_domains_resource(self, mcp_server, mock_vultr_client): """Test reading the domains resource content.""" - with patch('vultr_dns_mcp.server.VultrDNSServer', return_value=mock_vultr_client): + with patch('mcp_vultr.server.VultrDNSServer', return_value=mock_vultr_client): server = create_mcp_server("test-api-key") async with ClientSession(server) as session: @@ -216,7 +216,7 @@ class TestMCPToolErrors: mock_client = AsyncMock() mock_client.list_domains.side_effect = Exception("API Error") - with patch('vultr_dns_mcp.server.VultrDNSServer', return_value=mock_client): + with patch('mcp_vultr.server.VultrDNSServer', return_value=mock_client): server = create_mcp_server("test-api-key") async with ClientSession(server) as session: @@ -241,7 +241,7 @@ class TestMCPIntegration: @pytest.mark.asyncio async def test_complete_domain_workflow(self, mcp_server, mock_vultr_client): """Test a complete domain management workflow.""" - with patch('vultr_dns_mcp.server.VultrDNSServer', return_value=mock_vultr_client): + with patch('mcp_vultr.server.VultrDNSServer', return_value=mock_vultr_client): server = create_mcp_server("test-api-key") async with ClientSession(server) as session: @@ -269,7 +269,7 @@ class TestMCPIntegration: @pytest.mark.asyncio async def test_record_management_workflow(self, mcp_server, mock_vultr_client): """Test record creation and management workflow.""" - with patch('vultr_dns_mcp.server.VultrDNSServer', return_value=mock_vultr_client): + with patch('mcp_vultr.server.VultrDNSServer', return_value=mock_vultr_client): server = create_mcp_server("test-api-key") async with ClientSession(server) as session: diff --git a/tests/test_package_validation.py b/tests/test_package_validation.py index 176d9f7..a215c3d 100644 --- a/tests/test_package_validation.py +++ b/tests/test_package_validation.py @@ -13,16 +13,16 @@ sys.path.insert(0, str(src_path)) def test_package_imports(): """Test that all main package imports work correctly.""" # Test main package imports - from vultr_dns_mcp import VultrDNSClient, VultrDNSServer, create_mcp_server + from mcp_vultr import VultrDNSClient, VultrDNSServer, create_mcp_server assert VultrDNSClient is not None assert VultrDNSServer is not None assert create_mcp_server is not None # Test individual module imports - from vultr_dns_mcp.server import VultrDNSServer as ServerClass - from vultr_dns_mcp.client import VultrDNSClient as ClientClass - from vultr_dns_mcp.cli import main - from vultr_dns_mcp._version import __version__ + from mcp_vultr.server import VultrDNSServer as ServerClass + from mcp_vultr.client import VultrDNSClient as ClientClass + from mcp_vultr.cli import main + from mcp_vultr._version import __version__ assert ServerClass is not None assert ClientClass is not None @@ -32,7 +32,7 @@ def test_package_imports(): def test_version_consistency(): """Test that version is consistent across files.""" - from vultr_dns_mcp._version import __version__ + from mcp_vultr._version import __version__ # Read version from pyproject.toml pyproject_path = Path(__file__).parent.parent / "pyproject.toml" @@ -58,7 +58,7 @@ def test_fastmcp_available(): def test_mcp_server_creation(): """Test that MCP server can be created without errors.""" - from vultr_dns_mcp.server import create_mcp_server + from mcp_vultr.server import create_mcp_server # This should work with any API key for creation (won't make API calls) server = create_mcp_server("test-api-key-for-testing") @@ -71,7 +71,7 @@ def test_mcp_server_creation(): def test_cli_entry_points(): """Test that CLI entry points are properly configured.""" - from vultr_dns_mcp.cli import main, server_command + from mcp_vultr.cli import main, server_command assert callable(main) assert callable(server_command) @@ -138,7 +138,7 @@ def test_environment_setup(): def test_package_structure(): """Test that package structure is correct.""" - package_root = Path(__file__).parent.parent / "src" / "vultr_dns_mcp" + package_root = Path(__file__).parent.parent / "src" / "mcp_vultr" # Check that all expected files exist expected_files = [ diff --git a/tests/test_server.py b/tests/test_server.py index 8f52475..558e34a 100644 --- a/tests/test_server.py +++ b/tests/test_server.py @@ -2,7 +2,7 @@ import pytest from unittest.mock import AsyncMock, patch -from vultr_dns_mcp.server import VultrDNSServer, create_mcp_server +from mcp_vultr.server import VultrDNSServer, create_mcp_server class TestVultrDNSServer: @@ -103,14 +103,14 @@ class TestMCPServer: @pytest.fixture def mock_vultr_server(): """Fixture for mocked VultrDNSServer.""" - with patch('vultr_dns_mcp.server.VultrDNSServer') as mock: + with patch('mcp_vultr.server.VultrDNSServer') as mock: yield mock @pytest.mark.asyncio async def test_validation_tool(): """Test DNS record validation functionality.""" - from vultr_dns_mcp.server import create_mcp_server + from mcp_vultr.server import create_mcp_server # Create server (this will fail without API key, but we can test the structure) with pytest.raises(ValueError): diff --git a/tests/test_vultr_server.py b/tests/test_vultr_server.py index 650b0e4..9b24777 100644 --- a/tests/test_vultr_server.py +++ b/tests/test_vultr_server.py @@ -3,7 +3,7 @@ import pytest import httpx from unittest.mock import AsyncMock, patch -from vultr_dns_mcp.server import ( +from mcp_vultr.server import ( VultrDNSServer, VultrAPIError, VultrAuthError,