StackWiz MCP Server
An AI-powered MCP server for managing Docker infrastructure, enabling creation, deployment, and lifecycle management of containerized services with automated DNS and SSL.
README
StackWiz MCP Server
Transform your Docker infrastructure management with an AI-powered Model Context Protocol (MCP) server. StackWiz MCP enables AI assistants like Claude to create, manage, and deploy containerized services in your infrastructure programmatically.
๐ Documentation
| Document | Purpose |
|---|---|
| CLAUDE.md | Quick reference for Claude Code agents |
| docs/AGENT_REFERENCE.md | Canonical documentation - complete tool reference |
| docs/TECHNICAL_OVERVIEW.md | Deep technical architecture & LXC deployment guide |
| INSTALL.md | Installation guide for standalone deployment |
For AI Agents: Start with CLAUDE.md, refer to docs/AGENT_REFERENCE.md for detailed tool parameters.
For DevOps/Deployment: See docs/TECHNICAL_OVERVIEW.md for architecture details and environment configuration.
๐ Quick Start
Installation
# Install from Git (recommended)
pip install git+https://gitea.rbnk.uk/admin/stackwiz-mcp.git
# Or from GitHub:
pip install git+https://github.com/rickoslyder/stackwiz-mcp.git
# Or clone and install locally
git clone https://gitea.rbnk.uk/admin/stackwiz-mcp.git
cd stackwiz-mcp
pip install -e .
Claude Desktop Integration
Add to your Claude Desktop configuration (~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"stackwiz": {
"command": "python",
"args": ["-m", "stackwiz_mcp"],
"env": {
"STACKWIZ_BASE_DIR": "/srv/dockerdata",
"STACKWIZ_LOG_LEVEL": "INFO"
}
}
}
}
Basic Usage
Once configured, you can ask Claude to:
- "Create a new Grafana monitoring service"
- "Deploy a Pocketbase backend for my todo app"
- "List all running Docker stacks"
- "Create a PostgreSQL database with automatic backups"
- "Set up a Ghost blog with custom domain"
๐ฏ Features
Stack Management
- Create Stacks: Deploy any Docker container with automatic Traefik integration
- Pocketbase Support: Specialized support for Pocketbase backends
- List & Monitor: View all stacks with real-time status
- Lifecycle Control: Start, stop, restart, and remove stacks
- Log Access: Retrieve container logs for debugging
DNS Automation
- Cloudflare Integration: Full DNS record management (create, list, update, delete)
- Multiple Record Types: A, AAAA, CNAME, TXT, MX support
- Smart Defaults: Auto-detect server IP for A records
- Proxy Control: Toggle Cloudflare proxy (orange/gray cloud) per record
- Rate Limit Handling: Automatic retry with exponential backoff
- Zone ID Caching: Efficient API usage with 5-minute cache
Infrastructure Integration
- Traefik Ready: Automatic SSL/TLS with Let's Encrypt
- Network Management: Proper Docker network configuration
- Permission Handling: Secure file permissions (750/640)
- Template System: Consistent stack structure
๐ Available Tools
create_stack
Creates a new Docker service stack.
Parameters:
name(required): Stack identifier (lowercase, alphanumeric + hyphens)type: "generic" or "pocketbase"domain: Full domain for the serviceimage: Docker image (required for generic)port: Container port (required for generic)create_dns: Auto-create DNS recordauto_start: Start immediately after creationenvironment: Additional environment variables
list_stacks
Lists all Docker stacks in the infrastructure.
Parameters:
filter: Filter stacks by nameinclude_status: Include container statussort_by: Sort by name, created, or status
manage_stack
Performs operations on existing stacks.
Parameters:
stack_name(required): Target stackaction: start, stop, restart, remove, logsoptions: Additional options (follow_logs, tail_lines)
create_dns_record
Creates DNS records in Cloudflare with automatic retry and rate limit handling.
Parameters:
subdomain(required): Subdomain to createtype: Record type (A, CNAME, MX, TXT)value: Record value (AUTO for server IP)proxied: Enable Cloudflare proxy
list_dns_records
Lists DNS records from Cloudflare.
Parameters:
filter: Filter records by name (partial match)
update_dns_proxy
Toggles Cloudflare proxy for a DNS record.
Parameters:
subdomain(required): Target subdomainenable(required): true for proxied, false for DNS-only
delete_dns_record
Deletes DNS records from Cloudflare.
Parameters:
subdomain(required): Subdomain to delete
validate_stack_config
Validates configuration before creation.
Parameters:
config(required): Stack configuration objectcheck_conflicts: Check for port/domain conflicts
๐๏ธ Resources
The MCP server provides read access to:
- Stack Configurations:
stack://list,stack://{name}/compose - Templates:
template://generic,template://pocketbase - Infrastructure Info:
infra://networks,infra://domains
๐ก Prompts
Interactive deployment guides:
deploy-web-app: Step-by-step web application deploymentsetup-database: Database deployment with best practicescreate-api-service: API service with monitoring
๐๏ธ Architecture
stackwiz-mcp/
โโโ stackwiz_mcp/ # Main package
โ โโโ server.py # FastMCP server (preferred)
โ โโโ mcp_server.py # Standard MCP implementation
โ โโโ config.py # Configuration management
โ โโโ tools/ # MCP tool implementations
โ โโโ resources/ # Resource providers
โ โโโ prompts/ # Interactive prompts
โ โโโ models/ # Pydantic models
โ โโโ utils/ # Utilities
โโโ tests/ # Test suite
โโโ docs/ # Documentation
โโโ examples/ # Usage examples
๐งช Testing
# Run the test suite
./run_tests.sh
# Manual testing
python test_server.py
# Run specific tests
pytest tests/test_mcp_server.py -v
๐ณ Docker Deployment
# Build and run with Docker
docker compose up -d
# View logs
docker compose logs -f
# Stop the server
docker compose down
โ๏ธ Configuration
Environment Variables
STACKWIZ_BASE_DIR: Base directory for stacks (default:/srv/dockerdata)STACKWIZ_LOG_LEVEL: Logging level (DEBUG, INFO, WARNING, ERROR)STACKWIZ_ENV: Environment (development, production)DOCKER_HOST: Docker daemon socketCF_API_EMAIL: Cloudflare emailCF_DNS_API_TOKEN: Cloudflare API tokenDEFAULT_USER: File owner (default: current user)DEFAULT_GROUP: File group (default: docker)
Configuration File
Create config.json for persistent settings:
{
"docker": {
"network": "traefik_proxy",
"compose_timeout": 30
},
"dns": {
"default_ttl": 300,
"proxied": true
},
"traefik": {
"entrypoint": "websecure",
"certresolver": "cf"
}
}
๐ Security
- Input Validation: All inputs validated with Pydantic
- Command Injection Protection: Safe command execution
- Path Traversal Prevention: Restricted to base directory
- Secrets Management: Environment variables never logged
- Permission Management: Proper Unix permissions
๐ค Contributing
- Fork the repository
- Create a feature branch
- Make your changes
- Add tests for new functionality
- Run the test suite
- Submit a pull request
๐ License
MIT License - See LICENSE file for details.
๐ Acknowledgments
- Built on the Model Context Protocol specification
- Uses FastMCP framework
- Inspired by the original stackwiz shell script
๐ Troubleshooting
Server won't start
- Check Python version (3.8+ required)
- Verify dependencies:
pip install -r requirements.txt - Check permissions on base directory
Tools not working
- Ensure Docker daemon is running
- Verify user is in docker group
- Check
DOCKER_HOSTenvironment variable
DNS creation fails
- Verify Cloudflare API credentials (CF_API_TOKEN or CF_DNS_API_TOKEN)
- Check domain is managed by Cloudflare
- Ensure API token has DNS edit permissions
- Rate limits are handled automatically with retries
- See logs for detailed error messages
DNS proxy toggle fails
- Only A, AAAA, and CNAME records can be proxied
- MX and TXT records cannot be proxied (Cloudflare limitation)
Logs location
- Server logs:
~/.cache/stackwiz-mcp/logs/ - Stack logs:
docker compose -f {stack}/docker-compose.yml logs
๐ Support
- GitHub Issues: Report bugs and feature requests
- Documentation: See
/docsdirectory - Examples: Check
/examplesfor usage patterns
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.