An extensible MCP server template supporting multiple weather and data providers (SMHI, JSONPlaceholder) with built-in rate limiting, logging, and security infrastructure.
13 tools with complete schemas and descriptions, but quality is uneven. Tool names follow verb_noun convention (GetBlogPost, CreateBlogPost, etc.). Descriptions are present and contextual (avg ~150 chars), exceeding the 10-char minimum but falling short of the 50-200 char LLM-optimized range for several tools. All parameters have type definitions and descriptions with examples and valid ranges. However, descriptions lack explicit guidance on when to use each tool vs. similar alternatives (e.g., GetForecast vs GetCurrentWeather distinction is clear but not emphasized). Error handling and recovery guidance are absent from tool definitions. No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite clear risk classifications (READ_ONLY, WRITE). Output schemas are not documented in the definitions provided.
Use when you want to add a comment to a blog post. This demonstrates POST request functionality. The comment will be added to the post in the JSONPlaceholder API simulation.
Use when you want to create a new blog post. This demonstrates POST request functionality. The post will be created in the JSONPlaceholder API simulation. Returns the created post with an ID assigned by the API.
Use when you want to create a new todo item for a user. This demonstrates POST request functionality and task management. Returns the created todo with an ID assigned by the API.
Use when you need to retrieve a specific blog post to read its content. JSONPlaceholder provides 100 sample posts (IDs 1-100) for demonstration purposes. Returns the post title, author, and full body text.
Use when the user asks about current weather conditions at a specific location in Northern Europe. Returns a concise snapshot of the nearest-hour weather including temperature, wind, humidity, precipitation, pressure, and conditions. Lighter than GetForecast when only the current state is needed. Requires latitude and longitude within SMHI coverage (approx. 50-72°N, -1-40°E).
Use when the user asks about upcoming weather conditions at a specific location in Northern Europe. Returns a multi-day weather forecast summary with temperature, wind, precipitation, and conditions sampled every 3-6 hours. Requires latitude and longitude coordinates within the SMHI coverage area (approximately 50-72°N, -1-40°E covering Scandinavia and the Nordic region).
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite explicit risk classifications. CreateBlogPost, AddPostComment, CreateUserTodo are marked WRITE but lack destructiveHint annotation to signal irreversibility to agents.
Output schemas not documented in tool definitions. LLMs cannot plan downstream calls or extract required fields without knowing what each tool returns. E.g., CreateBlogPost returns a post with ID, but this is not stated in the definition.
No error handling or recovery guidance in tool descriptions. Tools lack actionable error messages (e.g., 'postId out of range 1-100' vs 'Invalid postId'). Agents cannot self-correct on failures.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 49 | <=2025-11-25 | v2 |
Use when the user asks about the freshness or last update time of the weather forecast model. Returns when SMHI last ran its weather prediction model, which indicates how recent the forecast data is. No coordinates needed — this describes the global model state.
Use when the user asks 'what is the typical weather in [month]?' or 'what are normal temperatures for a Swedish location. Compares the same month across recent years using actual station data. Requires a month number (1=January, 12=December).
Use when you need to retrieve comments on a specific blog post. Each post can have multiple comments left by different users. Returns a summary of all comments with author names and content.
Use when the user asks about precipitation history or how much rain/snow has fallen recently at a location in Sweden. Returns daily precipitation totals from the nearest SMHI station over the last ~4 months.
Use when the user asks about recent actual weather observations (not forecasts) at a location in Sweden. Returns the last 24 hours of temperature readings from the nearest SMHI weather station. This is measured data, not a forecast. Useful for verifying what actually happened vs what was predicted.
Use when the user asks about historical weather patterns, typical weather for a month, or climate data at a location in Sweden. Returns daily min/max/mean temperature from the nearest SMHI station over the last ~4 months. Good for questions like 'what has the weather been like this winter?' or 'how cold was it last month?'
Use when you need to see a user's todo list. Each user has a list of tasks they need to complete. Returns a summary showing pending and completed todos.
Descriptions lack explicit 'when to use' guidance for similar tools. GetForecast and GetCurrentWeather are distinct but descriptions do not explain when to prefer one over the other. LLMs may pick the wrong tool.
Descriptions include example values (e.g., 'e.g. 59.33 for Stockholm, 18.07 for Stockholm') which LLMs may reuse literally in real calls instead of adapting to user context.