Robust command execution service with daily log rotation
Server has 4 tools with basic schemas and descriptions, but significant gaps limit production readiness. All tools have descriptions (10-100 chars, mostly adequate) and input schemas with type definitions. However, parameter descriptions are sparse or missing context. The execute tool lacks clear guidance on dangerous command handling. Output schemas are not documented. Error handling is present but lacks recovery guidance. No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Naming is reasonable (verb-noun style) but descriptions could be more LLM-optimized per pattern:tool-description baseline (target 50-200 chars; most here are 30-100 chars).
Enable, disable, or modify command configurations
Execute a command with optional arguments and confirmation for dangerous operations
Retrieve execution logs with optional filtering by date or action type
Query available commands with optional filtering and detailed information
Output schemas not documented. LLMs cannot infer what fields execute, queryCommands, configureCommand, and getLogs return. This violates pattern:tool and forces agents to guess at response structure.
execute tool lacks clear error recovery guidance. When a dangerous command is rejected, the response includes a requiresConfirmation flag but no actionable next step. Per pattern:recovery-guide, errors must tell the LLM what to do next.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). execute is destructive and dangerous; queryCommands and getLogs are read-only; configureCommand is write. These hints are required by current MCP spec (2026-07-28) for agent safety.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 53 | <=2025-11-25 | v2 |
Parameter descriptions lack constraint details. 'command' has minLength/maxLength but description does not explain the 200-char limit or why. 'filter' enum values are not explained (what distinguishes 'enabled' from 'disabled'?). Per pattern:constrained-input, constraints must be human-readable in descriptions.
getLogs lacks pagination support. No limit default, no offset/cursor, no total count. If logs grow large, returning all entries will blow context windows. Per pattern:paginated-result, list tools must support pagination.