Read-only Linux server operations exposed as MCP tools, allowing AI agents to inspect a server without shell access
ops-mcp provides 8 read-only Linux operations tools with consistent naming (verb_noun pattern: system_info, disk_usage, service_status, etc.) and clear descriptions (avg ~80 chars). All tools declare readOnlyHint and destructiveHint annotations. However, parameter descriptions are sparse or missing entirely in several tools (e.g., docker_ps 'all' param lacks detail on behavior), and output schemas are completely undocumented, LLMs cannot predict response structure. Error handling is basic (wrapped in audit.Log but no recovery guidance). Audit logging is a security strength. No pagination, no structured output documentation.
Filesystem disk usage for every mounted volume (df -h). Read-only.
List Docker containers and their state (docker ps). Read-only.
List systemd units in a failed state (systemctl list-units --failed). Read-only.
Memory and swap usage (free -h). Read-only.
Validate the Nginx configuration (nginx -t). Read-only.
Recent log lines of one systemd unit (journalctl -u). Read-only.
Detailed status of one systemd unit (systemctl status). Read-only.
No output schemas documented. LLMs cannot predict response structure (fields, types, nesting). All 8 tools return raw command output as text strings with no structured schema.
Parameter descriptions incomplete or vague. docker_ps 'all' param says 'Pass "true" to include stopped containers' but lacks detail on default behavior or output format changes. service_journal 'lines' param lacks min/max bounds (spec says max 500 but no min stated).
No error recovery guidance. Errors wrapped in audit.Log but handlers return raw error strings (e.g., 'docker_ps failed: exit status 1'). LLMs receive no actionable next steps or error classification (retryable vs fatal).
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 49 | 2026-07-28+ | v2 |
Kernel, hostname and load average (uname -a + uptime). Read-only.
No pagination or result limits documented. service_journal can return up to 500 lines but no guidance on typical response size or when to paginate. Large outputs risk context window exhaustion.
Unit allowlist feature (OPS_MCP_UNIT_ALLOWLIST env var) is undocumented in tool descriptions. LLMs cannot know that service_status and service_journal may silently fail if a unit is not in the allowlist.