StackWiz MCP Server
Provides DNS record management (create, list, update, delete) with proxy control, automatic retry, and rate limit handling through Cloudflare's API.
Core infrastructure integration for creating, managing, and deploying Docker stacks with full lifecycle control (start, stop, restart, remove) and log access.
Enables setting up Ghost blogging platforms with custom domains, automatic SSL via Traefik, and Cloudflare DNS integration.
Allows deploying Grafana monitoring services as Docker stacks with automatic SSL/TLS and DNS setup.
Integration for automatic SSL/TLS certificate provisioning via Let's Encrypt through Traefik, ensuring secure HTTPS for deployed services.
Specialized support for deploying PocketBase backends as Docker stacks, including automatic configuration and Traefik integration.
Supports creating PostgreSQL databases with automatic backups and deployment as Docker stacks.
Click on "Install 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., "@StackWiz MCP ServerDeploy a Pocketbase backend for my todo app"
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.
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 |
Quick reference for Claude Code agents | |
Canonical documentation - complete tool reference | |
Deep technical architecture & LXC deployment guide | |
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.
Related MCP server: Docker MCP Server
๐ 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}/composeTemplates:
template://generic,template://pocketbaseInfrastructure 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.txtCheck 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
/docsdirectoryExamples: Check
/examplesfor usage patterns
Available Tools
10 toolscreate_dns_recordB
Create a DNS record
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | Record type (A, CNAME, MX, TXT) | A |
| value | No | Record value (AUTO for server IP) | AUTO |
| proxied | No | Enable Cloudflare proxy | |
| priority | No | Priority for MX records | |
| subdomain | Yes | Subdomain name |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, and the description fails to disclose behavioral traits such as idempotency, overwrite behavior, or requirement for specific parameters. For a mutation tool, this lack of transparency is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that conveys the core purpose without wasted words. However, it is so terse that it omits potentially useful context, though this is acceptable given its simplicity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite the existence of an output schema and full parameter documentation, the description is incomplete for a mutation tool. It lacks any behavioral context, such as what happens if a record already exists or whether special permissions are needed, leaving the agent with insufficient guidance.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline of 3 applies. The description adds no extra meaning beyond the schema's parameter descriptions, but it does not need to compensate for missing schema information.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action (create) and the resource (DNS record), distinguishing it from sibling tools like list_dns_records, update_dns_proxy, and delete_dns_record. It is specific and immediately understandable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives, nor any prerequisites, side effects, or conditions. It is a bare statement with no usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_stackB
Create a new Docker service stack
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | Stack name (lowercase, alphanumeric with hyphens) | |
| port | No | Container port (required for generic) | |
| type | No | Stack type (generic or pocketbase) | generic |
| image | No | Docker image (required for generic) | |
| domain | No | Custom domain (defaults to {name}.rbnk.uk) | |
| auto_start | No | Start stack after creation | |
| create_dns | No | Create DNS record | |
| environment | No | Environment variables |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It only states that a stack is created, but does not mention side effects such as DNS record creation, auto-start behavior, or what the return value will be. This is a significant gap for a mutation tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence with no redundancy. It is front-loaded with the core action and resource, earning every word.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite having 8 parameters and nested objects, the description provides no prerequisites, behavioral expectations, or hints about the output schema (even though one exists). The tool is complex enough that a one-line description is insufficient for an agent to know when and how to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema fully documents all parameters. The description does not add any parameter-specific semantics, but per the baseline rule, a score of 3 is appropriate when the schema handles the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Create') and clear resource ('Docker service stack'), which clearly states the tool's function. It distinguishes itself from sibling tools like list_stacks and manage_stack by indicating a create operation, not just listing or managing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for creating new stacks, but does not explicitly state when to use this tool versus alternatives like manage_stack or validate_stack_config. No exclusions or alternative recommendations are provided, so guidance is only implied by the 'Create' verb.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
delete_dns_recordB
Delete a DNS record
| Name | Required | Description | Default |
|---|---|---|---|
| subdomain | Yes | Subdomain name to delete |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It fails to mention permanence, required existing state, auth needs, or result behavior. For a delete operation, this is a significant gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, efficient sentence that wastes no words. It directly states the core purpose without redundancy, making it highly concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple one-parameter schema and presence of an output schema, the description is minimally adequate. However, the absence of annotations and lack of behavioral context leave room for improvement, making it complete only to a basic degree.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the 'subdomain' parameter, and the description adds no additional meaning beyond the schema. The baseline of 3 is appropriate since the schema already documents the parameter entirely.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action 'Delete a DNS record' with a distinct verb and resource. It distinguishes from sibling tools like create_dns_record and list_dns_records, making its purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives, nor any prerequisites or exclusions. It only states the action, leaving usage context entirely implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
health_checkA
Check server health and connectivity
Returns system health status including Docker, DNS, and filesystem checks.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full transparency burden. It conveys the non-mutating read-only nature ("Returns system health status") and enumerates exactly which checks are performed (Docker, DNS, filesystem), which is meaningful behavioral context beyond the empty schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two front-loaded sentences with zero filler. The first sentence states the core purpose; the second adds high-value detail about what the health check covers. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a zero-parameter read-only tool with an output schema available, the description is nearly complete: it states the purpose and enumerates the checks performed. It could add minor context like failure behavior or whether connectivity means outbound network checks, but these are not essential for a simple health-check tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so per the rubric baseline is 4. The description need not explain parameters, and the empty schema accurately reflects that the tool takes no input.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's verb ("Check") and resource ("server health and connectivity"), then specifies the covered subsystems (Docker, DNS, filesystem), distinguishing it from siblings like server_info which likely provides broader server details.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the name and descriptionโthis is the tool to run for a health/readiness checkโbut there is no explicit guidance about when to prefer this over a sibling like server_info, nor exclusion scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_dns_recordsB
List DNS records
| Name | Required | Description | Default |
|---|---|---|---|
| filter | No | Filter records by name |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description merely restates the tool name and adds no behavioral context. With no annotations provided, it fails to describe output format, permissions, read-only nature, or any side effectsโleaving the agent completely uninformed beyond what the name implies.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence with no wasted words. It is front-loaded and immediately conveys the action, making it easy to process.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicityโone optional parameter, no annotations, and an output schemaโthe description is functionally sufficient. It correctly identifies the operation, and the schema covers parameter semantics, so the agent can invoke it correctly. Slightly more context (e.g., pagination, filtering behavior) would improve completeness, but the core needs are met.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides a full description for the 'filter' parameter ('Filter records by name'), achieving 100% schema coverage. The tool description adds no parameter-specific information, but the schema already handles this, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'List DNS records' uses a specific verb (list) and resource (DNS records), clearly distinguishing it from sibling tools like create_dns_record, delete_dns_record, and list_stacks. The purpose is unambiguous and directly names the core action and object.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit usage guidance is provided, but the name and description make it obvious this tool is for retrieving DNS records. The sibling tools handle create/update/delete operations, so the use case is implied rather than explicitly stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_stacksA
List all existing Docker stacks
| Name | Required | Description | Default |
|---|---|---|---|
| filter | No | Filter stacks by name | |
| sort_by | No | Sort by name, created, or status | name |
| include_status | No | Include container status |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It states the basic list operation but adds no extra behavioral context (e.g., read-only nature, performance considerations, or filtering behavior). However, 'List' clearly implies a non-mutating operation, so it is minimally transparent but lacks depth.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, concise sentence that directly states the purpose. It is front-loaded and contains no waste, perfectly adhering to the principle that every sentence should earn its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is a simple list operation with three optional parameters fully described in the schema and an output schema present. The description is minimal but sufficient for overall understanding, though it could briefly mention the filtering/sorting capabilities to be fully self-contained. The existing schema compensates for this gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and each parameter (filter, sort_by, include_status) already has a clear description. The tool description adds no additional meaning about parameters, so the baseline score of 3 applies. The schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'List all existing Docker stacks' uses a specific verb ('List') and resource ('Docker stacks'), clearly distinguishing it from sibling tools like create_stack, manage_stack, and list_dns_records. The scope 'all existing' is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The context is clear: use this tool to view existing Docker stacks. There are no explicit exclusions or alternatives mentioned, but for a simple read-only list operation, the description adequately implies its use case. With siblings focused on other resources (DNS) or actions (create/manage), the intended usage is obvious.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_stackC
Perform operations on existing stacks
| Name | Required | Description | Default |
|---|---|---|---|
| action | Yes | Operation to perform (start, stop, restart, remove, logs) | |
| stack_name | Yes | Name of the stack | |
| tail_lines | No | Number of log lines to show | |
| follow_logs | No | Follow log output (for logs action) |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must disclose behavioral traits but does not. It does not mention that the 'remove' action is destructive, that 'logs' may stream or follow, or any side effects or access requirements. The description is generic and uninformative about real behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, but its brevity comes at the cost of specificity. It is a single generic sentence that does not front-load important details like the available actions. It earns its place for being short, but fails to provide substance in that space.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's moderate complexity (4 parameters, multiple action types, one destructive action), the description is far too minimal. It does not explain the trade-offs between actions, when to use each, or the effects on the stack. Even with an output schema present, the description fails to provide enough context for correct tool selection and invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the input schema fully documents all four parameters (action, stack_name, tail_lines, follow_logs). The description adds no parameter information, but the schema carries the burden, so a baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Perform operations on existing stacks' is vague; 'operations' does not specify the concrete actions like start, stop, restart, remove, or logs. It does distinguish from sibling tools like create_stack and list_stacks by focusing on existing stacks, but lacks the specificity expected for a clear purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No usage guidance is provided. The description gives no indication of when to prefer this tool over alternatives such as create_stack or list_stacks, nor does it mention any prerequisites or exclusions. The only implied context comes from the phrase 'existing stacks', which is not enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
server_infoA
Get server information and capabilities
Returns server version, available tools, and configuration details.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of disclosing behavioral traits. It does state the return content (version, tools, configuration), which is useful. However, it does not explicitly mention that the operation is read-only, safe, or what side effects (if any) exist, though the informational nature implies it.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loading the primary purpose and then elaborating on output. Every word adds value, with no fluff or redundancy. It is optimally concise for a zero-parameter info tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (0 params) and the presence of an output schema, the description sufficiently covers what the tool does and what it returns. It is complete for an informational endpoint, with no missing essential context such as prerequisites or side effects.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline is 4. The description correctly does not invent parameter information, and the input schema confirms no parameters are needed. No additional explanation is required beyond what the schema already shows.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose with a specific verb ('Get') and resource ('server information and capabilities'). It distinguishes itself from siblings focused on stacks, DNS, and health checks by covering general server metadata. The inclusion of return content (version, tools, configuration) adds clarity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance is given on when to use this tool versus alternatives. Sibling tools like health_check are related but no differentiation is provided. The description merely states what it does, leaving the agent to infer usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_dns_proxyA
Enable or disable Cloudflare proxy for a DNS record
| Name | Required | Description | Default |
|---|---|---|---|
| enable | Yes | True to enable proxy, False to disable | |
| subdomain | Yes | Subdomain name |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears the full burden of behavioral disclosure. It indicates a mutation ('Enable or disable') but does not disclose side effects, required permissions, error behavior on non-existent subdomains, or any rate limits. The absence of these details is a significant gap for a state-changing tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, compact sentence that directly states the tool's function without redundant phrasing. It is front-loaded with the action and object.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the low complexity (two parameters, simple boolean toggle) and presence of an output schema, the description covers the core purpose. However, it doesn't mention what happens if the subdomain doesn't exist or whether changes propagate immediately, which would enhance completeness. Still, it is largely sufficient for a simple tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides descriptions for both parameters (subdomain and enable) with 100% coverage. The description adds the context of 'Cloudflare proxy' but does not enrich parameter meaning beyond what the schema already states. Baseline of 3 is appropriate given full schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Enable or disable') and a clear resource ('Cloudflare proxy for a DNS record'). It clearly differentiates from sibling tools like create_dns_record, delete_dns_record, and list_dns_records by focusing on the proxy toggle action.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for toggling proxy state on an existing DNS record, but it does not explicitly state when to use this tool versus alternatives such as create_dns_record or delete_dns_record. No exclusions or prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_stack_configC
Validate a stack configuration
| Name | Required | Description | Default |
|---|---|---|---|
| config | Yes | Stack configuration to validate | |
| check_conflicts | No | Check for port/domain conflicts |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must disclose behavioral traits, but it only states the action. It does not indicate whether the operation is read-only, what happens on invalid configurations, or any side effects. The only hint of behavior (conflict checking) appears in the schema, not the description, leaving a significant transparency gap.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no wasted words, but it is so brief that it fails to provide necessary context. It is not verbose, but under-specification makes it less useful than a concise yet informative description.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has a nested object parameter and an output schema, and the schema hints at conflict checking, but the description is too minimal to explain the validation process or when it should be used. Sibling tools and the schema provide some context, but the description alone leaves major gaps in understanding what the tool does and returns.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with both parameters already described ('Stack configuration to validate' and 'Check for port/domain conflicts'). The tool description adds no additional meaning to the parameters, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description 'Validate a stack configuration' uses a specific verb and resource, clearly distinguishing it from siblings like create_stack and manage_stack. However, it is essentially a restatement of the tool name and does not elaborate on what validation entails, so it is clear but not maximally informative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool, such as before creating a stack or to check for conflicts. It does not mention alternatives or exclusions among sibling tools, leaving the agent without context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
10 tool updates
v1.0.0- First observed
create_dns_record - First observed
create_stack - First observed
delete_dns_record - First observed
health_check - First observed
list_dns_records - First observed
list_stacks - First observed
manage_stack - First observed
server_info - First observed
update_dns_proxy - First observed
validate_stack_config
TDQS
Tools are largely distinct but manage_stack is a generic catch-all that could overlap with create_stack or validate_stack_config. DNS tools and stack tools are clearly separated, and utility tools are distinct.
Most tools follow verb_noun pattern (create_stack, list_dns_records), but health_check and server_info break the pattern by being noun-focused. Also pluralization is inconsistent (list_stacks vs list_dns_records).
10 tools is within the ideal 3-15 range. Each tool serves a clear function in stack management, DNS management, or server introspection, with no obvious bloat.
Stack lifecycle is covered (create, list, manage, validate), but there is no full DNS record update (only proxy toggle), and manage_stack is vague about specific operations like delete. Core workflows are covered but some edge operations are missing.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
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.
An MCP server that integrates with Discord to provide AI-powered features.
MCP server for building and testing AI agents with multi-model experimentation and insights.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceAn MCP server that allows managing Docker containers through natural language, enabling users to compose, introspect, and debug containers without running commands themselves.742GPL 3.0
- AlicenseAqualityDmaintenanceAn MCP server that enables AI assistants to manage Docker containers, images, networks, and volumes through a standardized interface. It supports comprehensive operations like container lifecycle management and image pulling while ensuring correct handling of command and environment variable arrays.12251MIT
- AlicenseNot gradedqualityDmaintenanceAn MCP server that enables AI assistants to manage Dokploy infrastructure (Docker, projects, applications, databases, etc.) through natural language, acting as a universal translator between AI and cloud systems.29MIT
- AlicenseBqualityCmaintenanceMCP server for managing Docker containers, images, and Compose services via natural language, with configurable tool permissions and safety annotations.16MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/rickoslyder/stackwiz-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server