Universal system auditing tool for Linux servers that performs comprehensive security, resource, storage, and configuration checks with monitoring and Discord notification capabilities
CHIHUAUDIT has severe definition quality gaps across all dimensions. Tools lack structured input schemas, parameter descriptions are minimal or absent, and output schemas are completely undocumented. While tool names are reasonably action-oriented (audit, monitor, install, CheckSecurity, etc.), the definitions fall far short of production MCP standards. Most critically, the Check* tools (CheckSecurity, CheckServices, etc.) have empty input schemas `{}` with no parameters documented, and their descriptions, while present, are generic system-check summaries that don't guide LLM tool selection or explain when to use each variant. No error handling guidance, no security considerations, no output documentation. The audit and monitor tools accept parameters but descriptions lack depth about what JSON output contains or what monitoring changes look like. This server reads like a standalone CLI tool converted minimally to MCP format, not a purpose-built agent integration.
Check backup directory existence, last backup timestamp, backup size, recent backup files, and backup cron jobs
Check database availability and statistics for PostgreSQL, MySQL, and Redis
Check Docker availability and container/image statistics
Analyze system logs for errors, SSH failures, and service restarts
Check network connectivity including DNS resolution, ping latency, network interfaces, and top connected IPs
Monitor system resource usage including CPU load, memory, swap, disk mounts, and top processes
Perform comprehensive security checks including firewall, SSH configuration, SSL certificates, user accounts, failed logins, open ports, SUID binaries, world-writable files, and external connections
Nine Check* tools (CheckSecurity, CheckServices, CheckResources, CheckStorage, CheckDatabase, CheckDocker, CheckSystem, CheckLogs, CheckNetwork, CheckBackups, CheckSystemTuning) have zero input schema, empty `{}` object with no parameters. Per HARD SCORING RULES, schema score MUST be 0 when no schema is visible.
No output schemas documented for any tool. Tools return unstructured text or JSON, but LLMs have no way to know what fields to expect, what data types they are, or how to chain results to downstream tools. Without documented output, agents cannot plan multi-step operations.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 32 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 26 | - | v1 |
Check status of system services including web servers, databases, app servers, Docker, SSH, and cron
Check disk health, inode usage, I/O wait, and filesystem errors
Check system configuration including listening ports, active connections, cron jobs, systemd timers, last reboot, and pending updates
Check NTP synchronization status, file descriptor limits, and sysctl parameters
Run single audit with optional JSON output format
Generate default configuration file at ~/.chihuaudit/config.json
Install as systemd service with configurable monitoring interval
Start monitoring mode with configurable interval for continuous system auditing
Tool descriptions are generic summaries (e.g., 'Check status of system services including web servers, databases, app servers, Docker, SSH, and cron') but do not explain when to use this tool vs similar tools, what the output structure is, or how to interpret results.
Parameter descriptions are missing or minimal. 'interval' parameter in monitor and install accepts a string but provides no constraints, examples of valid formats, or validation rules.
No error handling guidance. Tools have no documented recovery paths. If audit fails, what should the LLM do next? If monitor crashes, how does the agent know whether to retry or ask the user? Per pattern:recovery-guide, error responses must guide the next step.
No permission gates or security annotations. install tool modifies system state (writes /etc/systemd/system/, runs systemctl) but has no permission check, audit trail, or destructive hint. Per pattern:permission-gate and rubric rule G.SECURITY, destructive operations must declare permissions and block unauthorized access.
Tool composition is poor. Eleven Check* tools each return domain-specific audit data (CheckSecurity returns firewall status, CheckServices returns service statuses, etc.), but there is no composition pattern. No tool accepts references from others (e.g., CheckLogs cannot filter by service name returned by CheckServices). Agents cannot chain results.
JSON output format for audit tool is undocumented. The --json flag is mentioned, but what structure does the JSON have? Are fields consistent across audit runs? Can an LLM reliably parse and extract status indicators? Without output schema, agents will hallucinate field names.
Monitor tool returns no structured indication of what changes were detected. main.go shows 'changes := state.Compare(previous, current, cfg)' and 'fmt.Printf("%d changes detected...\n", len(changes))', but the output schema and data model are invisible to the LLM. What fields do changes have? How does the agent distinguish critical alerts from noise?