A demonstration MCP server implementation in C# that exposes tools for random number generation and weather information.
This server has 2 tools with basic definitions and schemas visible in the source code. Both tools have descriptions and input schemas with typed parameters, meeting baseline requirements. However, the descriptions are extremely brief (under 50 chars), parameter descriptions lack depth, output schemas are undocumented, and there is no error handling guidance. The server follows a simple demo pattern but falls short of production quality. Naming is acceptable (get_random_number, get_city_weather both use verb_noun pattern), but descriptions provide minimal actionable context for LLM tool selection.
Describes random weather in the provided city.
Generates a random number between the specified minimum and maximum values.
Tool descriptions are too brief (<50 chars) and lack actionable context. 'Generates a random number between the specified minimum and maximum values' is minimal; no guidance on when to use this vs alternatives, no dependency hints, no context about use cases.
Output schema is completely undocumented. get_random_number returns an int, get_city_weather returns a string, but neither tool or MCP registration shows what the response structure will be. LLMs cannot plan downstream tool chains without knowing output fields.
No error handling or recovery guidance. If get_random_number receives invalid min/max (e.g., min > max), the response does not guide the LLM to self-correct. No categorization of errors as retryable or user-fixable.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 45 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 41 | - | v1 |
Parameter descriptions are minimal. 'Minimum value (inclusive)' and 'Maximum value (exclusive)' lack context on ranges, defaults, or constraints. No mention of what happens if min >= max for get_random_number. get_city_weather city parameter has no length limits, format constraints, or validity checks documented.
get_city_weather uses environment variable WEATHER_CHOICES at runtime, with a hardcoded fallback. This is not documented in the tool description, making it impossible for the LLM to understand where weather data comes from or what values are possible. Tool descriptions must surface operational dependencies.