Skip to main content
Glama

CargoShipper MCP Server

Python 3.11+ MCP PyPI uvx

A comprehensive MCP (Model Context Protocol) server that provides Claude with direct access to Docker, DigitalOcean, and CloudFlare APIs for infrastructure management and automation.

āš ļø IMPORTANT SAFETY WARNING

USE AT YOUR OWN RISK: This tool gives AI models direct access to infrastructure management APIs that can:

  • Create, modify, or delete cloud resources (potentially incurring costs)

  • Modify DNS settings (potentially breaking domains)

  • Manage Docker containers and images (potentially affecting running services)

  • Execute destructive operations on your infrastructure

Before using:

  • Ensure you understand the capabilities and risks of each API

  • Start with non-production environments only

  • Review all operations before execution in production

  • Monitor costs and resource usage carefully

  • Have backup and recovery procedures in place

AI models may:

  • Misinterpret instructions and perform unintended operations

  • Make mistakes in resource configuration or deletion

  • Execute multiple operations when only one was intended

  • Struggle with complex multi-step procedures requiring human judgment

Recommended safety measures:

  • Use dedicated development/testing accounts with spending limits

  • Implement least-privilege API tokens with restricted permissions

  • Monitor all operations through cloud provider dashboards

  • Test operations in isolated environments first

  • Keep backups of critical configurations and data

Related MCP server: easypanel-mcp-server

šŸ¤– VIBECODE FRIENDLY PROJECT

This project welcomes contributions from AI/LLM agents! Pull requests from Claude, GPT, and other AI models are actively encouraged.

Guidelines for AI contributors:

  • Follow existing code patterns and documentation standards

  • Include comprehensive commit messages explaining changes

  • Test changes thoroughly before submitting PRs

  • Update documentation when adding new features

✨ Easy Setup with uvx

CargoShipper is available on PyPI and works seamlessly with uvx for easy installation and management, just like mcp-server-git.

Quick Install from PyPI

# Run directly (recommended)
uvx cargoshipper-mcp

# Configure in your .mcp.json
{
  "mcpServers": {
    "cargoshipper": {
      "command": "uvx",
      "args": ["cargoshipper-mcp"]
    }
  }
}

Development Setup

For local development and testing:

  1. Clone the repository:

    cd cargoshipper-mcp
  2. Install dependencies:

    pip install -r requirements.txt
    # or create a virtual environment first
    python3 -m venv .venv
    source .venv/bin/activate  # Linux/Mac
    pip install -r requirements.txt
  3. Configure your APIs:

    cp .env.example .env
    # Edit .env with your API tokens:
    # DIGITALOCEAN_TOKEN=your_token_here
    # CLOUDFLARE_API_TOKEN=your_token_here
  4. Use the development MCP configuration:

    # Use .mcp.dev.json for local development
    cp .mcp.dev.json .mcp.json

🐳 Docker Integration

  • Container Management: Full lifecycle (create, start, stop, remove, logs)

  • Image Operations: List, pull, and manage Docker images

  • System Information: Docker system stats and health

  • Resource Monitoring: Container resource usage and status

🌊 DigitalOcean Integration

  • Droplet Management: Complete droplet lifecycle management

  • DNS Management: Full DNS record CRUD operations

  • Account Information: Access account details and billing

  • Image Management: Work with distributions and custom snapshots

ā˜ļø CloudFlare Integration

  • Zone Management: Create and configure CloudFlare zones

  • DNS Operations: Advanced DNS with proxy settings

  • Cache Control: Purge cache by URL, tags, or everything

  • Analytics: Traffic and performance analytics

  • Security Settings: SSL, security levels, firewall rules

šŸ”§ Available Tools & Resources

30 Tools Total:

  • Docker (9 tools): docker_run_container, docker_list_containers, etc.

  • DigitalOcean (10 tools): do_create_droplet, do_list_dns_records, etc.

  • CloudFlare (11 tools): cf_create_zone, cf_purge_cache, etc.

17 Resources Total:

  • docker://containers - All containers with status

  • digitalocean://droplets - All droplets with costs

  • cloudflare://zones - All zones with analytics

  • And many more...

šŸ“‹ Configuration Files

Production (.mcp.json)

{
  "mcpServers": {
    "cargoshipper": {
      "command": "uvx", 
      "args": ["cargoshipper-mcp"]
    }
  }
}

Development (.mcp.dev.json)

{
  "mcpServers": {
    "cargoshipper": {
      "command": "python",
      "args": ["-m", "cargoshipper_mcp.server"],
      "cwd": ".",
      "env": {
        "PYTHONPATH": "."
      }
    }
  }
}

šŸ”‘ API Credentials Setup

Create .env file or ~/.config/cargoshipper-mcp/.env:

# DigitalOcean API Token
DIGITALOCEAN_TOKEN=your_digitalocean_token_here

# CloudFlare API Token (recommended)
CLOUDFLARE_API_TOKEN=your_cloudflare_token_here

# Alternative: CloudFlare Email + Global API Key
# CLOUDFLARE_EMAIL=your@email.com
# CLOUDFLARE_API_KEY=your_global_api_key

Getting API Tokens:

šŸš€ Usage Examples

Once configured, Claude will have access to infrastructure operations:

# Docker examples
"Run an nginx container on port 8080"
"List all running containers"
"Get logs from container abc123"

# DigitalOcean examples  
"Create a small droplet in NYC3"
"List all my droplets and their costs"
"Add an A record for api.example.com"

# CloudFlare examples
"Create a new zone for mysite.com"
"Purge all cache for example.com" 
"Show me analytics for the last 24 hours"

šŸ“ Project Structure

cargoshipper-mcp/
ā”œā”€ā”€ cargoshipper_mcp/        # Main package (renamed from src/)
│   ā”œā”€ā”€ server.py           # MCP server entry point  
│   ā”œā”€ā”€ config/             # Configuration with multi-path .env loading
│   ā”œā”€ā”€ tools/              # API operation tools
│   │   ā”œā”€ā”€ docker.py       # Docker operations
│   │   ā”œā”€ā”€ digitalocean.py # DigitalOcean operations
│   │   └── cloudflare.py   # CloudFlare operations
│   ā”œā”€ā”€ resources/          # Read-only data access
│   └── utils/              # Shared utilities
ā”œā”€ā”€ .mcp.json              # Production MCP config (uvx)
ā”œā”€ā”€ .mcp.dev.json          # Development MCP config (local python)
ā”œā”€ā”€ pyproject.toml         # Python packaging (uvx compatible)
ā”œā”€ā”€ requirements.txt       # Dependencies
└── install.sh             # uvx installation script

šŸŒ Published on PyPI

CargoShipper MCP is now available on PyPI! Access it at: https://pypi.org/project/cargoshipper-mcp/

Setup is as simple as:

# Run directly (most common)
uvx cargoshipper-mcp

# Configure in .mcp.json
{
  "mcpServers": {
    "cargoshipper": {
      "command": "uvx",
      "args": ["cargoshipper-mcp"] 
    }
  }
}

šŸ› ļø Development

Package Structure

  • Uses proper Python packaging with pyproject.toml

  • Console entry point: cargoshipper-mcp = "cargoshipper_mcp.server:main"

  • Multi-path environment loading for uvx compatibility

  • Type hints and comprehensive error handling throughout

Testing

python test_server.py  # Validates imports and configuration

This approach follows the same pattern as mcp-server-git and other uvx-compatible MCP servers, making it extremely easy to install and use once published!

Available Tools

21 tools
cf_create_dns_recordA

Create a DNS record

Args: zone_id: CloudFlare zone ID record_type: DNS record type (A, AAAA, CNAME, MX, TXT, etc.) name: Record name (subdomain or @ for root) content: Record content (IP address, domain name, etc.) ttl: Time to live (1 = Auto, 120-7200 seconds) proxied: Whether to proxy through CloudFlare (orange cloud) priority: Priority for MX records

Inputs: zone_id (required), record_type (required), name (required), content (required), +3 more. Returns: result

cf_create_zoneB

Create a new CloudFlare zone

Args: name: Domain name for the zone account_id: CloudFlare account ID jump_start: Import existing DNS records automatically zone_type: Zone type ('full' or 'partial')

Inputs: name (required), account_id (required), jump_start, zone_type. Returns: result

cf_delete_dns_recordB

Delete a DNS record

Args: zone_id: CloudFlare zone ID record_id: DNS record ID

Inputs: zone_id (required), record_id (required). Returns: result

cf_delete_zoneB

Delete a CloudFlare zone

Args: zone_id: CloudFlare zone ID

Inputs: zone_id (required). Returns: result

cf_get_analyticsA

Get zone analytics

Args: zone_id: CloudFlare zone ID since: Start time (ISO 8601 format) until: End time (ISO 8601 format) continuous: Return continuous data (True) or time series (False)

Inputs: zone_id (required), since (required), until (required), continuous. Returns: result

cf_get_zoneC

Get detailed information about a specific zone

Args: zone_id: CloudFlare zone ID

Inputs: zone_id (required). Returns: result

cf_get_zone_settingsB

Get CloudFlare zone settings

Args: zone_id: CloudFlare zone ID

Inputs: zone_id (required). Returns: result

cf_list_dns_recordsA

List DNS records for a zone

Args: zone_id: CloudFlare zone ID record_type: Filter by record type (A, AAAA, CNAME, etc.) name: Filter by record name content: Filter by record content

Inputs: zone_id (required), record_type, name, content. Returns: result

cf_list_zonesA

List CloudFlare zones

Args: per_page: Number of zones per page (5-50) page: Page number to retrieve
name: Filter by zone name status: Filter by status (active, pending, initializing, moved, deleted, deactivated)

Inputs: per_page, page, name, status. Returns: result

cf_purge_cacheB

Purge CloudFlare cache

Args: zone_id: CloudFlare zone ID purge_everything: Purge all cache (use carefully) files: List of specific URLs to purge tags: List of cache tags to purge hosts: List of hostnames to purge

Inputs: zone_id (required), purge_everything, files, tags, +1 more. Returns: result

cf_update_dns_recordC

Update a DNS record

Args: zone_id: CloudFlare zone ID record_id: DNS record ID record_type: DNS record type (if changing) name: Record name (if changing) content: Record content (if changing) ttl: Time to live (if changing) proxied: Proxy status (if changing) priority: Priority for MX records (if changing)

Inputs: zone_id (required), record_id (required), record_type, name, +4 more. Returns: result

cf_update_zone_settingB

Update a specific zone setting

Args: zone_id: CloudFlare zone ID setting: Setting name (e.g., 'ssl', 'always_use_https', 'security_level') value: New value for the setting

Inputs: zone_id (required), setting (required), value (required). Returns: result

docker_get_logsA

Get logs from a Docker container

Args: container_id: Container ID or name tail: Number of lines from end of logs (default: 100) follow: Follow log output (default: False) timestamps: Include timestamps (default: True)

Inputs: container_id (required), tail, follow, timestamps. Returns: result

docker_list_containersA

List Docker containers

Args: all_containers: Include stopped containers (default: True) filters: Optional filters {"key": "value"}

Inputs: all_containers, filters. Returns: result

docker_list_imagesB

List Docker images

Inputs: no named parameters. Returns: result

docker_pull_imageB

Pull a Docker image

Args: image: Image name to pull (e.g., 'nginx:latest') registry: Registry server URL (optional, defaults to Docker Hub) use_auth: Whether to use authentication (default: True)

Inputs: image (required), registry, use_auth. Returns: result

docker_remove_containerA

Remove a Docker container

Args: container_id: Container ID or name force: Force remove running container

Inputs: container_id (required), force. Returns: result

docker_run_containerA

Run a Docker container with specified configuration

Args: image: Docker image name (e.g., 'nginx:latest') name: Optional container name command: Optional command to run ports: Optional port mappings {"container_port": host_port} environment: Optional environment variables volumes: Optional volume mounts {"host_path": "container_path"} detach: Run in detached mode (default: True) remove: Remove container when it stops (default: False)

Inputs: image (required), name, command, ports, +4 more. Returns: result

docker_start_containerA

Start a stopped Docker container

Args: container_id: Container ID or name

Inputs: container_id (required). Returns: result

docker_stop_containerA

Stop a Docker container

Args: container_id: Container ID or name timeout: Timeout in seconds before forcefully killing

Inputs: container_id (required), timeout. Returns: result

docker_system_infoB

Get Docker system information

Inputs: no named parameters. Returns: result

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

Loading tool schema changelog…

    TDQS

    B3.4/5.0

    Scored across 21 tools

    Disambiguation4/5

    Tools are clearly disambiguated by their 'cf_' and 'docker_' prefixes, making it easy to distinguish between CloudFlare and Docker operations. However, the presence of two unrelated domains may confuse an agent about which set to use for a given task.

    Naming Consistency5/5

    All tool names follow a consistent pattern: prefix (cf_ or docker_) followed by verb_noun (e.g., cf_create_dns_record, docker_list_containers). No style mixing or vague verbs observed.

    Tool Count3/5

    21 tools is on the high side for a typical single-purpose server, though each subdomain (CloudFlare and Docker) has a reasonable count. The combined set feels heavy and could be split into separate servers for better coherence.

    Completeness3/5

    The CloudFlare tools cover core zone and DNS operations, while Docker tools cover basic container lifecycle. However, both lack advanced features (e.g., Docker networks, CloudFlare firewall rules), and the dual-domain focus leaves potential gaps in each area.

    Maintenance

    ActivityInactive
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      D
      maintenance
      A production-ready MCP server ecosystem providing Claude AI with 150+ specialized tools across enhanced memory, data analytics, security, design, and infrastructure domains with PostgreSQL, Redis, Qdrant, and Docker orchestration.
      MIT
    • A
      license
      B
      quality
      C
      maintenance
      MCP Server for full Easypanel control via Claude Code, Cursor, and Claude Desktop. Provides 37 tools for deploy, logs, env vars, domains, databases, and monitoring with built-in safety guards.
      57
      309 npm
      4
      MIT
    • A
      license
      A
      quality
      D
      maintenance
      MCP server that wraps Docker, Caddy, and GitHub Actions operations on a remote VPS, enabling Claude to take read-then-write-with-confirmation infrastructure actions over SSH with a service allowlist and audit-trail-friendly responses.
      8
      MIT