Local stdio MCP server for read-only diagnosis of on-prem Linux VMs and PostgreSQL databases
infra-mcp demonstrates solid definition quality with consistent naming, comprehensive parameter descriptions, and clear input schemas across all 10 tools. All tools follow verb_noun naming (list_vms, get_service_status, query_db). Parameter descriptions are detailed and include constraints (e.g., 'server-capped at 200'). However, output schemas are not explicitly documented in the source code, only input schemas are visible. Error handling descriptions are minimal; tools lack recovery guidance. No tool annotations (readOnlyHint, destructiveHint) despite all being READ_ONLY. Descriptions average ~120 chars, within the 10-1024 baseline but could be more LLM-optimized.
Describes one named table — its columns and types, primary key, and foreign-key relationships — scoped to just that table, so you can author a correct (possibly multi-table) query directly. Indexes and comments are not included. Set refresh=true to force a live re-read.
Returns recent entries from the local audit log (oldest first).
Returns health metrics for a configured database: connection counts, waiting locks, and long-running query count.
Returns service statuses and database health for a named VM in a single call. Call this first when diagnosing any VM-level issue. Unreachable services or databases are listed with an error note rather than failing the whole call.
Returns the last N lines of a log file on a VM, with optional grep pattern. Both grep and line-capping execute on the VM before any data is transmitted.
Returns bounded journald logs for a service, filtered by severity level. Filtering and line-capping execute on the VM before transmission.
Output schemas not documented. Tool descriptions state what is returned (e.g., 'Returns systemd state, uptime, and last 5 log lines') but no structured schema is visible in source code. LLMs cannot plan downstream tool calls without knowing response field names and types.
No tool annotations despite all tools being READ_ONLY. Tool definitions lack readOnlyHint, destructiveHint, or idempotentHint annotations. This prevents agents from understanding which tools are safe to retry and which have side effects.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 60 | 2026-07-28+ | v2 |
Returns systemd state, uptime, and last 5 log lines for a service on a VM. Use for a quick health check before requesting full logs.
Lists the tables of a configured database with their schema/namespace, in one bounded call — no column detail. Call this first to decide which tables are relevant before describing them. Set refresh=true to force a live re-read.
Returns all configured VMs with reachability status and watched service names. Call this first in any session to discover available infrastructure.
Executes a caller-supplied SELECT statement against a configured database, bounded by row limit. Only SELECT is permitted.
Error handling lacks recovery guidance. Tool descriptions do not explain what to do if a VM is unreachable, a service is not in the allowlist, or a database query fails. Descriptions mention constraints (e.g., 'must be in the VM's allowlist') but not how to recover when violated.
Parameter 'pattern' in get_log_file lacks enum or format constraint. Description says 'Extended regex applied on the VM before transmission (grep -E)' but does not specify valid regex syntax or examples. LLMs may pass invalid patterns.
Discovery tools (list_tables, describe_table) lack explicit guidance on when to call them. Descriptions state what they return but not the recommended workflow (e.g., 'Call list_tables first to see available tables, then describe_table to inspect schema before writing a query').