MCP server for managing Linux systems via Webmin. Supports multiple Webmin servers with comprehensive system administration tools.
Server has 29 well-named tools with consistent verb_noun patterns (list_, get_, create_, delete_, etc.). All tools have descriptions (avg ~120 chars, within baseline 34-392 range). Input schemas are present and properly typed for all tools. However, output schemas are NOT documented, critical gap for LLM planning. Parameter descriptions are present but often generic ('Server alias...' repeated 29 times). No error handling guidance, no recovery hints, no actionable error messages. Missing tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk levels. Cron job tools lack validation constraints (cron syntax). No pagination support despite list_webmin_logs accepting a limit. Overall: solid naming and basic structure, but lacks LLM-optimized descriptions, output documentation, and error recovery patterns.
Create a new scheduled cron job. Specify the command to run and the schedule using cron syntax (minutes, hours, days, months, weekdays). Use '*' for 'every' (e.g., '*/5' for every 5 minutes).
Create a new Webmin user account. This is a dangerous operation and is blocked in safe mode.
Delete a scheduled cron job.
Disable a service from starting automatically at system boot. Critical services are blocked to prevent boot failures.
Edit an existing cron job.
Enable a service to start automatically at system boot.
Output schemas not documented. LLMs cannot plan downstream tool calls or extract required fields (e.g., what fields does get_system_info return? Is there a next_cursor for pagination?). This violates pattern:tool and pattern:response-shaper.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk levels. Tools like delete_cron_job, stop_service, create_webmin_user are marked DESTRUCTIVE/WRITE but lack annotations to guide agent behavior. Violates pattern:tool-annotation.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 61 | <=2025-11-25 | v2 |
Get disk usage information for all mounted filesystems. Shows total, used, and free space, plus inode usage.
Get memory usage information. Shows total, used, and free memory in KB, MB, and GB, plus buffer and cache usage.
Get network configuration including all interfaces (with IP, MAC, speed), routing table, and default gateway.
Get the status of a specific system service. Returns whether the service is running or stopped.
Get SSH server (sshd) configuration. Returns key SSH daemon configuration settings.
Get comprehensive system information including OS, kernel, CPU, memory, disk usage, and update status. This is a good starting point for understanding system state.
Get the current system time and timezone. Returns the system's current date, time, and timezone configuration.
Get detailed information about a Webmin user. Uses acl::get_user(username) for direct lookup instead of listing all users.
Get the version of the connected Webmin server. Returns the version string and hostname.
List Webmin configuration backups. Returns available configuration backups that can be restored.
List all scheduled cron jobs. Shows the schedule, command, user, and whether each job is active.
List system runlevels and their descriptions. Returns information about available runlevels on the system.
List all system services (systemd units or init scripts). Returns service names. Use get_service_status to check if a specific service is running.
List all system users. Returns both regular users (UID >= 1000) and system users separately, with details like home directory and shell.
List Webmin action/audit logs. Returns recent actions performed through Webmin.
List all available Webmin modules.
List all configured Webmin servers with their aliases and connection info. Shows which server is the default.
List all Webmin user accounts.
Modify a Webmin user's permissions or password. This is a dangerous operation and is blocked in safe mode.
Restart a system service. The service will be stopped and then started again. Some critical services (ssh, webmin) may be blocked in safe mode.
Start a stopped system service. If the service is already running, this is a no-op.
Stop a running system service. Critical services (ssh, webmin, systemd services) are blocked to prevent system lockout.
Test connectivity to a specific Webmin server. Returns version and hostname if successful.
No error handling guidance. Tools return errors but do not tell LLMs what to do next (retry? ask user? try alternative?). Missing pattern:recovery-guide and pattern:error-classification. Example: 'Connection failed' vs 'Connection failed to pi1 (192.168.1.10:10000). Verify server is online and credentials are correct.'
Cron job parameters lack validation constraints. 'minutes', 'hours', 'days', 'months', 'weekdays' accept free-form strings with no enum, pattern, or range. LLMs can pass invalid cron syntax (e.g., '99' for hours, 'invalid' for weekdays). Should enforce 0-59 for minutes, 0-23 for hours, etc., or document the exact cron syntax expected.
No pagination support for list tools. list_webmin_logs accepts 'limit' but no offset/cursor. list_services, list_users, list_cron_jobs, list_webmin_users, list_webmin_modules have no pagination at all. Large result sets will blow context windows. Violates pattern:paginated-result.