A C# MCP server example demonstrating tool registration and stdio transport
All three tools have identical, generic descriptions ('Echoes the message back to the client' for Echo and Reverse; 'Get length of string' for Length). No input schemas are visible in the source code, only parameter names and types are inferred from method signatures. No output schemas documented. Tool names lack action verbs (Echo, Reverse, Length are nouns/adjectives, not verb_noun patterns). No error handling, validation, or recovery guidance. No parameter descriptions beyond the bare type. This is a minimal example server with no production-grade tooling patterns applied.
Echoes the message back to the client.
Get length of string.
Echoes the message back to the client.
No input schemas visible in source code. Tool definitions use C# method signatures with no explicit JSON Schema registration. Cannot verify parameter types, constraints, or descriptions at the MCP protocol level.
Descriptions are generic and non-actionable. Echo and Reverse both say 'Echoes the message back to the client' (identical text). Length says 'Get length of string' (18 chars, under 20-char minimum). No WHEN to use, no prerequisites, no output format guidance.
Tool names lack action verbs. 'Echo', 'Reverse', 'Length' are nouns/adjectives. Should be 'echo_message', 'reverse_string', 'get_string_length' to match verb_noun convention and help LLMs infer intent from the name alone.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 19 | <=2025-11-25 | v2 |
No output schemas documented. Return types are inferred (string for Echo/Reverse, int for Length) but not formally declared. LLMs cannot plan downstream tool calls without knowing the response structure.
No parameter descriptions. The 'message' parameter appears in all three tools but has no description explaining what it should contain, expected format, length limits, or constraints.