Production-grade FastMCP server, RAG checklist, and prompt engineering guardrails for AI engineers.
Two tools with basic schemas and descriptions, but significant gaps in parameter documentation, output schema clarity, and error handling guidance. system_health has no input parameters (empty schema) and minimal description (34 chars, below baseline 194). summarize_text_heuristic has typed parameters with constraints but lacks output schema documentation. Neither tool includes error recovery guidance or actionable error messages. No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite both being read-only. Naming is acceptable (verb_noun pattern) but descriptions are too terse to guide LLM selection effectively.
Extracts key salient sentences from supplied content.
Returns the live operational status of the server.
system_health description is 34 characters ('Returns the live operational status of the server.'), below the 194-char baseline and lacks context for LLM selection. Does not explain when to call it vs other discovery tools, what fields are returned, or whether it has side effects.
Output schemas are not documented. summarize_text_heuristic returns {summary, sentences_extracted, original_char_length} but the tool definition does not declare this structure. LLMs cannot plan downstream calls or validate responses without explicit output schema.
No error handling guidance. execute_tool() returns generic error objects (RATE_LIMIT_EXCEEDED, TOOL_NOT_FOUND, EXECUTION_ERROR) with no recovery hints. LLMs cannot determine whether to retry, ask the user, or abandon the task.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 43 | <=2025-11-25 | v2 |
Tool annotations missing. Both tools are read-only but lack readOnlyHint in their definitions. This prevents clients from optimizing caching, retry logic, or safety checks.
summarize_text_heuristic parameter 'text' has minLength=10 but no guidance on expected format (plaintext, markdown, HTML?). Description says 'Raw text' but does not clarify handling of special characters, encoding, or maximum length.