An MCP server that exposes health check monitoring tools for pulse checkers, allowing clients to inspect system health states and optionally trigger checks or reset failure counts.
The server has a focused domain (health monitoring) with clear, action-oriented tool names. All 6 tools are explicitly registered with descriptions and JSON Schema input parameters. However, several definition-quality issues prevent a higher score: (1) Parameter descriptions are minimal or absent for several tools, the 'name' parameter appears in 4 tools with identical 1-line descriptions that could be more specific about format/constraints; (2) Output schemas are not documented, tool return types are inferred from code (CheckerSummary, etc.) but not visible in the tool definitions or rubric source; (3) Error handling guidance is minimal, tools like get_checker and get_check_history offer no recovery hints if a checker is not found; (4) No pagination guidance for get_check_history despite accepting limit/offset parameters; (5) Tool descriptions are functional but could better explain when/why to use each tool relative to others (e.g., difference between get_health_states, get_unhealthy_checkers, and running specific get_checker calls). The read-only vs. write distinction and separation into two files (HealthieTools.cs and HealthieActionTools.cs) is excellent architecture but not reflected in tool naming to guide agent selection.
Returns the recent run history of one component, newest first. Use this to see how long a component has been failing and what it reported over time.
Returns one component's current health and its configuration, including how often it runs and how many consecutive failures it tolerates before being called unhealthy.
Returns the current health of every monitored component, including the last result and when it last ran. Start here to see the overall health of the system.
Returns only the components that are currently unhealthy or suspicious. Use this to find what is wrong without reading through healthy components.
Clears a component's consecutive failure count and marks it healthy, without running the check. Use this after a problem has been fixed to clear the failure streak.
Runs one component's health check immediately, instead of waiting for its next scheduled run, and returns the fresh result. Use this to confirm whether a problem is still happening.
Output schemas not documented. Tool definitions in the rubric source do not include return type schemas, they must be inferred from code (CheckerSummary, etc.). LLMs cannot plan downstream operations without knowing what fields will be available.
Parameter descriptions are minimal for 'name' parameter (appears in 4 tools: get_checker, get_check_history, run_check, reset_checker). Description 'The name of the component, as reported by get_health_states' is functional but lacks format constraints, case sensitivity, or allowed character set. Baseline: 100% of A+ tools have param descriptions 50+ chars; these are ~50-60 chars and vague.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | 2026-07-28+ | v2 |
Error handling guidance absent from tool descriptions. Code includes proper error messages ('No checker named X. Call get_health_states to list...'), but these recovery hints are not documented in the tool description. LLMs rely on descriptions to understand error recovery paths.
No pagination documentation for get_check_history. Tool accepts 'limit' and 'offset' but description does not state: (a) maximum result count (code says 'capped by server' but does not expose the cap), (b) whether a next_cursor or total_count is returned, (c) what happens if offset exceeds history length. Baseline: paginated results must return total count or next_cursor.
No explicit dry-run or confirmation pattern for write operations (run_check, reset_checker). Best practice for irreversible operations is to support a confirmation step so agents can preview side effects. Code includes proper error handling but no dry-run option.
Tool names do not distinguish read vs. write operations in their prefixes. All six tools use get_, list_, run_, or reset_. Best practice: write operations could use prefixes like 'set_', 'update_', 'trigger_' to signal state change. Current naming requires LLM to read full description to detect mutations.