An MCP server that exposes tools for weather information, park information, product search, and stock search for an e-commerce platform
The eShopLite MCP server exhibits significant quality gaps across definition criteria. Tool registration exists via C# attributes ([McpServerTool]), but critical issues are evident: (1) Three of five tool slots are DUPLICATES (tools 1 and 4 are both GetWeatherForCity; tools 2 and 5 are both GetParkInformation), reducing the effective tool count to 3 unique tools. (2) Parameter schemas are minimal, only single string parameters with basic descriptions; no numeric bounds, enums, or complex constraints are present. (3) Descriptions are adequate in length but lack actionable context on WHEN to use each tool vs alternatives and lack error recovery guidance. (4) Output schemas are defined in response classes (WeatherToolResponse, ParkInformationToolResponse, ProductsSearchToolResponse), but these are not explicitly validated or documented in the tool metadata. (5) No error handling patterns are visible, tools lack guidance on how LLMs should recover from failures (missing city, park not found, stock search API timeout). (6) Tool names follow verb_noun pattern (GetWeatherForCity, GetParkInformation, SearchProductStockAsync), which is positive, but the duplication undermines clarity. The code shows working implementations with dependency injection, but tool definition quality for agentic composition is weak.
Retrieves comprehensive information about a specified park. Use this function when the user is asking questions about parks, their locations, opening hours, facilities, or how to get there. Returns detailed park information including name, description, location, opening hours, transportation options, and available facilities.
Retrieves comprehensive information about a specified park. Use this function when the user is asking questions about parks, their locations, opening hours, facilities, or how to get there. Returns detailed park information including name, description, location, opening hours, transportation options, and available facilities.
Retrieves the current weather conditions for a specified city. Use this function when the user asks about weather in a specific location. Returns both the city name and a textual description of current weather conditions.
Retrieves the current weather conditions for a specified city. Use this function when the user asks about weather in a specific location. Returns both the city name and a textual description of current weather conditions.
Searches for product stock by name. Returns stock information including quantities across all locations.
Tool list contains 2 exact duplicates: GetWeatherForCity appears in slots 1 and 4; GetParkInformation appears in slots 2 and 5. This wastes capability slots and introduces confusion for LLM tool selection.
Input schemas lack enums, numeric bounds, and format constraints. 'cityName' and 'parkName' are free-form strings with no validation guidance. ProductName is similarly unconstrained. This invites invalid inputs from LLMs and provides no self-documenting constraints.
Output schemas are defined in response classes (WeatherToolResponse, ParkInformationToolResponse) but are not visible in the tool definition metadata provided. Descriptions reference 'returns city name and weather condition' and 'returns detailed park information' but do not document the exact JSON structure LLMs should expect.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 59 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 40 | - | v1 |
No error handling or recovery guidance visible. Descriptions do not state what happens if a city/park is not found, API timeout occurs, or stock API returns empty results. LLMs lack guidance on whether to retry, ask user, or select an alternative tool.
Parameter descriptions are minimal (10 - 20 chars). 'The name of the city to get the weather information' and similar descriptions lack actionable context on format, length, or acceptable values.