cargoshipper-mcp
Offers zone management, advanced DNS operations with proxy settings, cache control (purge by URL, tags, or all), traffic and performance analytics, and security settings like SSL and firewall rules.
Enables complete droplet lifecycle management, DNS record CRUD operations, account information retrieval, and image management including distributions and snapshots.
Provides full lifecycle management for containers (create, start, stop, remove, logs), image operations (list, pull), system information (stats, health), and resource monitoring.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@cargoshipper-mcp list my Docker containers"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
CargoShipper MCP Server
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:
Clone the repository:
cd cargoshipper-mcpInstall 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.txtConfigure your APIs:
cp .env.example .env # Edit .env with your API tokens: # DIGITALOCEAN_TOKEN=your_token_here # CLOUDFLARE_API_TOKEN=your_token_hereUse 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 statusdigitalocean://droplets- All droplets with costscloudflare://zones- All zones with analyticsAnd 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_keyGetting API Tokens:
DigitalOcean: API Tokens Page
CloudFlare: API Tokens Page
š 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.tomlConsole 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 configurationThis 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 toolscf_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
Scored across 21 tools
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.
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.
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.
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
Related MCP Connectors
MCP server for AI agents to plan, verify, and deploy Cloudflare-native apps.
Devopness MCP server for DevOps happiness! Empower AI Agents to deploy apps and infra, to any cloud.
Cloudflare Workers MCP server: ai-agent-scratchpad
Hosted MCP server for live public-data APIs and Skills for AI agents.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA 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
- AlicenseBqualityCmaintenanceMCP 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.57309 npm4MIT
- AlicenseAqualityDmaintenanceMCP 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.8MIT
- FlicenseNot gradedqualityDmaintenanceAn MCP server that enables Claude to deploy full-stack web apps to Cloudflare, including databases, authentication, and file storage, directly through natural language.-