Model Context Protocol (MCP) server for DuploCloud that discovers duploctl resources and exposes them as MCP tools for AI agents and compatible clients.
The DuploCloud MCP server exposes 6 tools with varying quality. Tool naming follows verb-noun conventions (resources, explain_resource, explain_command, execute, config, health), which is good. Descriptions are present for all tools and generally adequate (range 30-200 chars). However, several critical gaps emerge: (1) The 'execute' tool accepts a broad 'body' parameter as an untyped object, forcing LLMs to rely on separate explain_command calls to discover valid schemas, this is a composition and schema design weakness. (2) Parameter descriptions are sparse or missing context for complex cases. (3) Output schemas are undocumented, LLMs cannot know what fields to expect from execute() without calling explain_command first. (4) Error handling is minimal; tool implementations return error dicts but offer no recovery guidance. (5) The 'explain_command' and 'explain_resource' tools are discovery helpers, not primary agents, they add indirection to the LLM workflow (resources → explain_resource → explain_command → execute) rather than surfacing resource operations directly. This is a valid but inelegant composition pattern. Across 6 tools, average scores show competent naming (85), acceptable descriptions (68), and weak schemas (45).
Display current MCP server configuration. Returns the DuploCloud connection info, active filters, and the list of registered tools.
Execute a DuploCloud command. Use the explain_command tool first to understand what arguments a command expects. Dispatches through the DuploClient just like the CLI . Commands that accept a body will automatically validate against the resource's model schema when available.
Explain a specific command's arguments and body schema. Returns detailed argument info and a JSON schema for the body when a Pydantic model is defined. Use this to understand what arguments the execute tool expects. Use the explain_resource tool to see available commands for a resource.
List all commands available on a DuploCloud resource. Returns each command name with a summary and aliases. Use the command names with explain_command for detailed argument info, or directly with execute. Use the resources tool to see all available resources.
Health check endpoint for load balancers and monitoring.
execute() tool has untyped 'body' parameter (type: object, no schema). LLMs cannot know valid fields without a separate explain_command call. This forces a multi-step discovery workflow instead of direct execution.
Output schemas are undocumented for all tools. Tool descriptions do not specify what fields and types are returned. LLMs must infer output structure from examples or trial-and-error.
Error handling returns generic error dicts (e.g. {'error': '...'}) with no recovery guidance. When a resource is not found, the error does not suggest alternatives or remediation steps.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 69 | <=2025-11-25 | v2 |
| 2026-03-09 | C | 62 | - | v1 |
List available DuploCloud resources. Returns the names of all resources that match the server's resource filter. Use these names with the explain_resource and execute tools.
Discovery tools (explain_resource, explain_command) are separate from action tools, requiring LLMs to chain multiple calls before executing any command. This is valid but adds latency and context overhead. Consider also exposing resource-specific action tools alongside the generic execute tool.
Parameter 'args' in execute() is documented as 'A map of additional command arguments as key-value pairs' but lacks examples of which arguments are valid for different resources and commands. LLMs must call explain_command to learn valid keys.
health() tool description is minimal (15 chars: 'Health check endpoint for load balancers and monitoring.'). No guidance on what a 200 response means, whether it checks all dependencies, or what to do on failure.