A comprehensive Rust framework for building Model Context Protocol (MCP) servers with support for multiple protocols, transports, storage backends, and extensions
Scoring was not performed
fetch_data has malformed input schema: 'count' parameter has type 'integer' but NO description. Schema cannot exceed 30.
6 tools have descriptions under 40 characters (soft floor of 10, but descriptions <40 are below the p10 baseline of 34 chars and provide minimal LLM guidance): batch_process (24 chars), dynamic_slow_op (25 chars), benchmark_compute (44 chars, borderline), benchmark_cpu (49 chars, borderline), benchmark_session (48 chars, borderline). These descriptions are too terse to disambiguate tool selection.
No tool declares output schemas. LLMs need to know what fields to expect.' All 14 tools lack output schema documentation, forcing LLMs to guess result structure and violating HARD baseline that '100% of A+ tools have documented return types.'
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 28 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 35 | 2025-11-25+ | v1 |
Naming inconsistency and ambiguity: calculator_add_* tools use passive 'add' (not verb form 'add'), benchmark_compute and benchmark_cpu are generic ('compute', 'cpu'), dynamic_slow_op uses jargon ('op' is not standard).
3 tools marked WRITE (batch_process, dynamic_slow_op, benchmark_session) have descriptions that do NOT explicitly state state modifications.
personalized_greeting claims to perform 'elicitation' (asking user for details) but MCP elicitation feature is disabled (elicitation=false). This creates a capability mismatch: the tool's semantic behavior contradicts the server's declared feature support. LLMs expecting elicitation prompts will be confused.
get_profile and search_profiles lack parameter descriptions for 'username' and 'query'/'limit' respectively.
No error handling or recovery guidance defined for any tool. Check parameters? Call a different tool? No guidance is provided.