MCP Server for Raft Consensus Leader Election and Heartbeat State Machine with zero external dependencies
Server has 4 tools with basic naming and descriptions, but critical gaps in schema completeness, parameter documentation, and error handling. All tools lack input parameter descriptions, the rubric requires every parameter to have a description explaining what it controls. Two tools (start_election, send_heartbeat) have empty input schemas with no parameters documented. Output schemas are not documented. Descriptions are present but generic (10-50 chars), below the 50-200 char baseline for LLM-optimized tools. No error handling guidance, no recovery paths, no validation rules stated. Tools are narrowly focused (good), but the interface is underdeveloped for agent use.
Evaluates vote request from peer candidate.
Records peer vote and transitions to LEADER if majority reached.
Broadcasts append-entries heartbeat from LEADER.
Transitions to CANDIDATE, increments term, and votes for self.
Empty input schemas for start_election and send_heartbeat. Both tools have {} as input, with no parameters defined or described.
All parameter descriptions missing. receive_vote_request and record_vote_response have typed parameters (candidate_id, term, from_peer, vote_granted) but no descriptions explaining what each controls. Rubric: 'Every parameter needs a description explaining what it controls.' LLMs cannot infer meaning from names alone.
Output schemas not documented. Tools return dicts (e.g. {node_id, term, state, action}) but no schema is declared in the tool definition. Rubric: 'Document the output schema. LLMs need to know what fields to expect.' Agents cannot plan downstream calls without knowing return structure.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 40 | 2026-07-28+ | v2 |
Descriptions too short and generic. 'Transitions to CANDIDATE, increments term, and votes for self' (54 chars) and 'Broadcasts append-entries heartbeat from LEADER' (47 chars) lack context for LLM selection. Baseline: 50-200 chars for LLM-optimized tools. No WHEN to use, no prerequisites, no side effects stated.
No error handling or recovery guidance. send_heartbeat returns {error: 'Only leader can send heartbeat'} but no guidance on what the LLM should do next. Rubric: 'Error responses must tell the LLM what to do next.' No retry classification, no actionable next steps.