Skip to main content
Glama
robford-brookai

DuploCloud Docker MCP Server

DuploCloud Docker MCP Server

MCP server that exposes DuploCloud infrastructure management as tools consumable via Docker MCP Toolkit.

Tools (31 total)

Category

Tools

Tenants

tenant_list, tenant_get, tenant_create, tenant_delete

Services

service_list, service_get, service_create, service_update, service_delete, service_restart

Hosts

host_list, host_get, host_create, host_delete, host_reboot

Databases

database_list, database_get, database_create, database_update, database_delete

Storage

bucket_list, bucket_get, bucket_create, bucket_update, bucket_delete

Containers

ecs_service_list, ecs_task_def_list, ecs_task_list, ecs_task_run, ecs_service_update, ecs_service_delete

Setup

Prerequisites

  • Python 3.13+

  • uv

  • DuploCloud portal access with an API token

Environment Variables

export DUPLO_HOST=https://your-company.duplocloud.net
export DUPLO_TOKEN=your-api-token
export DUPLO_TENANT=default  # optional

Install & Run

uv sync
uv run main.py

Docker

docker build -f docker/Dockerfile -t duplocloud-mcp .
docker run -i --rm \
  -e DUPLO_HOST=https://your-company.duplocloud.net \
  -e DUPLO_TOKEN=your-api-token \
  duplocloud-mcp

Docker MCP Toolkit

docker mcp server add duplocloud-mcp

Tool Reference

Tenants

Tool

Parameters

Description

tenant_list

List all tenants accessible in the DuploCloud portal

tenant_get

name

Get details of a specific tenant by name

tenant_create

account_name, plan_id

Create a new tenant

tenant_delete

name

Delete a tenant by name

Services

Tool

Parameters

Description

service_list

tenant_id

List all services in a tenant

service_get

tenant_id, name

Get details of a specific service

service_create

tenant_id, name, image, replicas=1

Create a new service

service_update

tenant_id, name, image?, replicas?

Update service image and/or replicas

service_delete

tenant_id, name

Delete a service

service_restart

tenant_id, name

Restart a service (rolling redeployment)

Hosts

Tool

Parameters

Description

host_list

tenant_id

List all hosts (VMs) in a tenant

host_get

tenant_id, name

Get details of a specific host

host_create

tenant_id, friendly_name, capacity, agent_platform=0

Create a new host (0=Linux Docker, 7=EKS Linux)

host_delete

tenant_id, name

Terminate a host

host_reboot

tenant_id, name

Reboot a host

Databases

Tool

Parameters

Description

database_list

tenant_id

List all RDS instances in a tenant

database_get

tenant_id, name

Get details of an RDS instance

database_create

tenant_id, identifier, engine, size, master_username="master", master_password?

Create an RDS instance

database_update

tenant_id, name, size?

Resize an RDS instance

database_delete

tenant_id, name

Delete an RDS instance

Storage

Tool

Parameters

Description

bucket_list

tenant_id

List all S3 buckets in a tenant

bucket_get

tenant_id, name

Get details of an S3 bucket

bucket_create

tenant_id, name

Create a new S3 bucket

bucket_update

tenant_id, name, versioning?

Update bucket configuration (versioning)

bucket_delete

tenant_id, name

Delete an S3 bucket

Containers (ECS)

Tool

Parameters

Description

ecs_service_list

tenant_id

List all ECS services in a tenant

ecs_task_def_list

tenant_id

List all ECS task definition families

ecs_task_list

tenant_id, service_name

List running tasks for a service

ecs_task_run

tenant_id, family_name, replicas=1

Run a task from a task definition family

ecs_service_update

tenant_id, name, image

Update the image of an ECS service

ecs_service_delete

tenant_id, name

Delete an ECS service

Troubleshooting

Missing environment variables

DuploError: DUPLO_HOST environment variable is required

Set DUPLO_HOST and DUPLO_TOKEN before running. See .env.example.

Invalid or expired token

{"error": "Unauthorized", "code": 401}

Generate a new API token from the DuploCloud portal: User menu > Security > API Token.

Tenant not found

{"error": "Tenant 'xyz' not found", "code": 404}

Verify the tenant name with tenant_list. Tenant names are case-sensitive.

Connection refused

{"error": "Unexpected error: Connection refused", "code": 500}

Verify DUPLO_HOST is correct and the DuploCloud portal is reachable from your network.

Development

# Install with dev dependencies
uv sync

# Lint & format
uv run ruff check .
uv run ruff format .

# Tests
uv run pytest
uv run pytest --cov=duplocloud_mcp --cov-report=term-missing

# Single test
uv run pytest tests/test_tools/test_services.py::test_service_list

Architecture

main.py                          # Entrypoint: mcp.run(transport="stdio")
duplocloud_mcp/
  server.py                      # FastMCP instance, imports tool modules
  client.py                      # DuploClient singleton wrapper
  errors.py                      # Error decorator, validators
  tools/
    tenants.py                   # Tenant CRUD tools
    services.py                  # Service CRUD + restart tools
    hosts.py                     # Host CRUD + reboot tools
    databases.py                 # RDS database CRUD tools
    storage.py                   # S3 bucket CRUD tools
    containers.py                # ECS service/task tools

Each tool module imports the shared mcp instance from server.py and registers tools via @mcp.tool(). The @handle_duplo_errors decorator translates DuploCloud exceptions into structured JSON error responses. The duplocloud-client library handles all REST API communication.

License

MIT

Install Server
A
security – no known vulnerabilities
A
license - permissive license
A
quality - confirmed to work

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/robford-brookai/duplocloud-docker-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server