Very simple MCP server with systemd support for managing systemd services via D-Bus
Server has 4 tools with basic schemas and descriptions, but significant gaps prevent production use. All tools have descriptions (10-70 chars, mostly short), and input schemas are present with proper JSON Schema structure. However, parameter descriptions are sparse or missing entirely (e.g., 'manage_service' action param has no description), output schemas are undocumented, and error handling provides no recovery guidance. The 'manage_service' tool lacks descriptions for both the 'service' and 'action' parameters, violating the requirement that every parameter must have a description. No tool documents what it returns or how to chain results. Security concerns: no input validation visible, no rate limiting, and destructive operations (stop/restart) lack confirmation patterns.
Fetch the last 20 lines of journalctl logs for a service.
Get detailed ActiveState and SubState of a service.
List all systemd units currently in a 'failed' state.
Start, stop, or restart a systemd service.
manage_service lacks parameter descriptions: 'service' and 'action' have no descriptions explaining what values are valid or what the action does. LLMs cannot infer whether 'action' accepts arbitrary strings or only the enum values shown.
No output schemas documented for any tool. LLMs do not know what fields to expect in responses, preventing downstream tool chaining and forcing them to parse unstructured text.
Destructive operations (stop, restart, reload in manage_service) lack confirmation or dry-run support. An agent could accidentally stop critical services without user approval.
Error responses return raw error messages with no recovery guidance. 'Error: Unit not found' tells the agent nothing about what to do next (e.g., 'Try list_failed_services() to see available units').
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 50 | <=2025-11-25 | v2 |
No input validation visible. execSync() calls in get_service_logs and manage_service are vulnerable to command injection if 'service' parameter is not sanitized. LLMs can be tricked into passing malicious service names.