MCP Server for Hierarchical Task Network HTN Planner Skill
Two tools with basic schemas and minimal descriptions. register_operator has a complete JSON Schema with 4 required parameters (name, preconditions, add_effects, del_effects), each with type and description. plan_task_network similarly has 2 required parameters with types and descriptions. However, descriptions are extremely brief (under 20 chars for both tools), violating the critical baseline that descriptions must be 10 - 1024 chars and actionable for LLM selection. No output schemas documented. No error handling guidance. No parameter constraints (e.g., enums, ranges, patterns). Tool names lack clarity on when to use each vs. alternatives. No idempotency guarantees, no recovery guidance, no audit trail hints.
Decompose compound tasks into primitive plan sequence
Register primitive action operator with preconditions and effects
Descriptions critically short (under 20 chars). 'Register primitive action operator with preconditions and effects' and 'Decompose compound tasks into primitive plan sequence' lack WHEN to use, prerequisites, or side effects. LLMs cannot reliably select these tools without richer context.
No output schemas documented. Callers cannot predict response structure. register_operator returns {status: 'operator_registered'} and plan_task_network returns {plan: [...]}, both inferred from code, not declared in tool metadata. LLMs cannot plan downstream calls without knowing output fields.
No error handling or recovery guidance. If preconditions fail, if task_network is unsolvable, or if an operator is not registered, the tool returns None or an error string with no actionable next step. LLMs cannot self-correct.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 41 | 2026-07-28+ | v2 |
Parameter descriptions missing or trivial. 'preconditions' is described as 'List of preconditions that must be satisfied before executing the operator', circular and unhelpful. What format? Ground predicates? Logic expressions? No examples or constraints.
No idempotency guarantees. Calling register_operator twice with the same name silently overwrites the first registration. Agents retrying on transient failures risk duplicate side effects. No confirmation or dry-run pattern for destructive operations.