A FastAPI-based MCP server template with auto-discovery of tools from app/tools directory, health endpoint, and optional MCP SSE transport
Single tool with basic definition but significant gaps in description quality and parameter documentation. The tool has an input schema with proper type, but the description is minimal (71 characters, below the 194-char baseline for production tools). No parameter-level description visible in the schema, the parameter 'input_text' relies solely on the docstring, not on JSON Schema metadata. No output schema is documented. The tool's risk is correctly marked READ_ONLY, but there is no error handling guidance or recovery instructions. This is a minimal template example, not a production-grade tool.
An example tool that echoes the provided input text.
Tool description is too brief (71 chars vs 194-char baseline). Does not answer WHEN to use the tool, WHAT it returns, or any context for selection. LLMs cannot reliably determine when to call 'example_tool' vs other echo/transform tools.
Output schema is not documented. The tool returns a string, but the docstring does not describe the format, structure, or downstream usage. LLMs cannot plan what to do with the result.
Parameter description is embedded in the docstring, not in the JSON Schema. The 'input_text' parameter in the schema has a description 'The text to process and return,' but production tools should include this metadata in both places for clarity. More critically, there is no indication of constraints (length limits, format, encoding) that an LLM needs to know.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 48 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 37 | - | v1 |
Tool name 'example_tool' does not follow verb_noun convention (e.g., 'echo_text', 'process_text', 'transform_text'). The name is generic and does not clearly signal what action occurs. While acceptable for a template, a production tool should use 'echo_' or 'process_' prefix.
No error handling or recovery guidance. If the tool fails (e.g., encoding error, input validation), there is no direction for the LLM on what to do next. No categorization of errors as retryable, user-fixable, or fatal.