A zero-dependency stdio MCP server that exposes one tool, `hermes_delegate`, that runs the local Hermes Agent in one-shot full-auto mode and returns its output.
Single tool 'hermes_delegate' has a complete input schema with all parameters typed and described. Tool description is clear and actionable (168 chars, within 10-1024 baseline). However, output schema is undocumented, the tool returns text content but LLMs cannot predict structure or plan downstream calls. Error handling returns text messages but lacks categorization (retryable vs fatal) or recovery guidance. No tool annotations (destructiveHint, idempotentHint). The tool delegates to an external subprocess with timeout handling, but no documentation of what structured data Hermes returns or how to chain results.
Delegate a self-contained task to the local Hermes Agent (a full AI assistant CLI with its own tools, skills, and memory) and return its final answer. Runs Hermes one-shot in full-auto mode; Hermes completes the task on its own and returns the result. Use to offload subtasks to a second agent.
Output schema undocumented. Tool returns {'content': [{'type': 'text', 'text': ...}], 'isError': bool} but LLMs cannot predict what Hermes outputs or structure downstream calls. No field documentation for the text content.
Error handling lacks categorization and recovery guidance. Timeout, missing binary, and subprocess failures return plain text but do not indicate if the error is retryable, user-fixable, or fatal. LLM cannot decide next action.
Tool name 'hermes_delegate' uses generic verb 'delegate' rather than action-specific verb. 'run_hermes_task' or 'execute_hermes_agent' would be clearer about what the tool does.
No tool annotations. Tool modifies state (runs external agent, may have side effects) but lacks destructiveHint or idempotentHint. LLM cannot reason about retry safety.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 53 | 2026-07-28+ | v2 |
Parameter 'timeout_sec' has no minimum/maximum bounds. Unbounded integer lets LLM pass absurd values (0, 999999). Should specify range (e.g., 1-3600).