MCP (Model Context Protocol) server for Atmospore — exposes pollen forecast tools to Claude and other AI assistants.
Strong tool naming and descriptions that prioritize LLM usability. All four tools follow verb_noun patterns and include detailed, context-aware descriptions (194 - 280 chars) that explain WHEN to use each tool and WHAT it returns. Input schemas are complete with proper types and defaults. However, output schemas are only documented in prose (descriptions), not in JSON Schema format. Error handling is well-structured with typed error responses guiding recovery. Resource descriptions reference use cases. Minor gaps: output fields not explicitly enumerated in schema; no tool annotations (readOnlyHint/destructiveHint); one tool (list_supported_species) could benefit from describing the multilingual output structure more precisely.
Get tree, grass, and weed pollen aggregates over a radius around a point. Use this for higher-level questions like "is tree or grass pollen worse this week?" or "is pollen rising over the next few days in Stockholm?". Returns one entry per day with overall_risk and per-category aggregates (tree_tot, grass_tot, weed_tot). `radius_km` (default 25) controls the area. `forecast_days` (default 7) sets the horizon.
Get the daily pollen forecast for a specific point on Earth. Use this for questions like "what's the pollen in Oslo?" or "is the pollen bad in Bergen tomorrow?". Returns a list of daily forecasts. Each day includes: - date (YYYY-MM-DD) - overall_risk: "Low" | "Moderate" | "High" | "Very High" - species: per-species values in grains/m³ with individual risk levels If the user asks about a city by name, look up its coordinates first (or use the `get_area_average` tool with rough coords if you only know the city).
Get the top contributing pollen species at a specific point today. Use this to answer "what pollen is highest in Oslo right now?" or "which trees are blooming in Bergen?". Returns a ranked list (highest first). Each species includes: - species (slug, e.g. 'birch') - display_name (human-readable, e.g. 'Birch') - max_value in grains/m³ - risk_level - category ('tree' | 'grass' | 'weed') `limit` (default 5) caps the list length.
List all pollen species the model tracks, with metadata. Use this if the user asks "what species do you cover?" or to validate a species name before using it in another tool. Returns slug, display name, category (tree/grass/weed), localised display names (en, no, sv), and concentration thresholds for the risk levels.
Output schemas not formally documented in JSON Schema. Descriptions include example fields (date, overall_risk, species) but no structured schema definition for responses.
Tool annotations (readOnlyHint, destructiveHint, idempotentHint) not present. All tools are read-only (safe to retry), but this is not formally declared in the tool definition.
Error responses are well-structured (ok/error/message/hint) but not tied to tool definitions. LLM cannot see in advance what errors a tool might return or how to handle them.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | B | 75 | <=2025-11-25 | v2 |
list_supported_species output structure (multilingual names, thresholds) mentioned in description but not enumerated as specific fields. LLM must infer structure from prose.