Skip to main content
Glama
schlpbch

open-meteo-mcp

by schlpbch
WARNING

This repository has been consolidated into theswiss-mcp mono-repo. New development happens in packages/open-meteo-mcp/. This repo is kept for historical reference only.

Open Meteo MCP Server

A Model Context Protocol (MCP) server providing weather and snow condition tools via the Open-Meteo API.

Version 3.3.0 - Full type safety, automated quality checks, 90% test coverage!

Features

Core Capabilities

  • Geocoding: Search locations by name instead of coordinates

  • Weather Forecasts: Get current weather and multi-day forecasts for any location

  • Snow Conditions: Get snow depth, snowfall, and mountain weather data

  • Air Quality: Monitor AQI, pollutants, UV index, and pollen levels

  • MCP Resources: Weather codes, ski resort coordinates, AQI reference, Swiss locations

  • MCP Prompts: Guided workflows for ski trips, outdoor activities, and travel planning

  • Free API: No API key required - powered by Open-Meteo's free weather API

  • MCP Integration: Seamlessly integrates with MCP-compatible clients like Claude Desktop

Quality & Reliability (Phase 8 Complete)

  • Type Safety: 0 mypy errors, full type annotations across codebase

  • Code Quality: 100% ruff formatting and linting compliant

  • Error Handling: Standardized error handling decorators across all tools (Phase 8)

  • Automated Checks: Pre-commit hooks enforce quality on every commit

  • Test Coverage: 248+ tests passing, 90%+ code coverage

  • Production Ready: Fully tested, documented, and ready for deployment

Related MCP server: open-meteo-mcp-server

Tools

search_location

Search for locations by name to get coordinates (NEW in v2.1).

Parameters:

  • name (required): Location name to search

  • count (optional): Number of results (1-100, default: 10)

  • language (optional): Language for results (default: "en")

  • country (optional): Country code filter (e.g., "CH" for Switzerland)

Example: search_location(name="Zurich") → Returns coordinates, elevation, timezone

get_weather

Get weather forecast for a location with temperature, precipitation, humidity, and more.

Parameters:

  • latitude (required): Latitude in decimal degrees

  • longitude (required): Longitude in decimal degrees

  • forecast_days (optional): Number of forecast days (1-16, default: 7)

  • include_hourly (optional): Include hourly forecasts (default: true)

  • timezone (optional): Timezone for timestamps (default: "auto")

Enhanced in v2.1: Now includes precipitation probability, apparent temperature, UV index, cloud cover, visibility, wind gusts

get_snow_conditions

Get snow conditions and forecasts for mountain locations.

Parameters:

  • latitude (required): Latitude in decimal degrees

  • longitude (required): Longitude in decimal degrees

  • forecast_days (optional): Number of forecast days (1-16, default: 7)

  • include_hourly (optional): Include hourly data (default: true)

  • timezone (optional): Timezone for timestamps (default: "Europe/Zurich")

Enhanced in v2.1: Now includes wind chill, cloud cover, precipitation probability

get_air_quality

Get air quality forecast including AQI, pollutants, UV index, and pollen (NEW in v2.1).

Parameters:

  • latitude (required): Latitude in decimal degrees

  • longitude (required): Longitude in decimal degrees

  • forecast_days (optional): Number of forecast days (1-5, default: 5)

  • include_pollen (optional): Include pollen data (default: true, Europe only)

Returns: European/US AQI, PM10, PM2.5, O3, NO2, SO2, CO, UV index, pollen counts

Resources

The server provides MCP resources for reference data:

weather-codes

WMO weather code reference with descriptions, categories, and travel impact.

  • URI: weather://codes

  • Format: JSON

  • Content: 28 weather codes with interpretations

...existing code...

swiss-locations

Popular Swiss locations with coordinates (NEW in v2.1).

  • URI: weather://swiss-locations

  • Format: JSON

  • Content: Cities, mountains, passes, and lakes

aqi-reference

Air Quality Index interpretation guide (NEW in v2.1).

  • URI: weather://aqi-reference

  • Format: JSON

  • Content: European/US AQI scales, UV index, pollen levels, health recommendations

weather-parameters

Available weather and snow parameters from Open-Meteo API.

  • URI: weather://parameters

  • Format: JSON

  • Content: Hourly/daily parameters with units and categories

Prompts

The server provides MCP prompts to guide LLM workflows:

ski-trip-weather

Guide for checking snow conditions and weather for ski trips.

  • Arguments: resort, dates

  • Workflow: Resort lookup → Snow conditions → Weather → Assessment

plan-outdoor-activity

Weather-aware outdoor activity planning workflow.

  • Arguments: activity, location, timeframe

  • Workflow: Activity sensitivity → Weather check → Suitability assessment

weather-aware-travel

Integration pattern for combining weather with journey planning.

  • Arguments: destination, travel_dates, trip_type

  • Workflow: Destination weather → Packing advice → Activity suggestions

Technology Stack

  • Python 3.11+

  • FastMCP - MCP server framework

  • httpx - Async HTTP client

  • Pydantic - Data validation

  • structlog - Structured logging

  • uv - Fast Python package manager

Prerequisites

  • Python 3.11 or higher

  • uv package manager

Installation

Install uv (if not already installed)

Windows (PowerShell):

powershell -c "irm https://astral.sh/uv/install.ps1 | iex"

macOS/Linux:

curl -LsSf https://astral.sh/uv/install.sh | sh

Install Dependencies

uv sync

This will install all required dependencies including FastMCP, httpx, pydantic, and testing tools.

Running Locally

Stdio Mode (for Claude Desktop)

uv run python -m open_meteo_mcp.server

Testing with MCP Inspector

npx @modelcontextprotocol/inspector uv run python -m open_meteo_mcp.server

MCP Integration

Claude Desktop Configuration

Add to your Claude Desktop configuration file:

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json

{
  "mcpServers": {
    "open-meteo": {
      "command": "uv",
      "args": [
        "--directory",
        "C:\\Users\\YourUsername\\path\\to\\open-meteo-mcp",
        "run",
        "python",
        "-m",
        "open_meteo_mcp.server"
      ]
    }
  }
}

Note: Update the --directory path to match your local installation.

Development

Running Tests

# Run all tests
uv run pytest tests/ -v

# Run with coverage
uv run pytest tests/ --cov=open_meteo_mcp --cov-report=html

# Run specific test file
uv run pytest tests/test_models.py -v

Project Structure

open-meteo-mcp/
├── src/
│   └── open_meteo_mcp/
│       ├── __init__.py
│       ├── server.py          # FastMCP server with tools, resources, prompts
│       ├── client.py           # Open-Meteo API client
│       ├── models.py           # Pydantic models
│       ├── helpers.py          # Utility functions
│       └── data/               # JSON resource files
│           ├── weather-codes.json
...existing code...
│           └── weather-parameters.json
├── tests/
│   ├── test_models.py
│   ├── test_client.py
│   └── test_helpers.py
├── pyproject.toml              # Project configuration
└── .fastmcp/
    └── config.yaml             # FastMCP Cloud deployment config

Deployment

FastMCP Cloud

Deploy to FastMCP Cloud for remote access:

# Login to FastMCP Cloud
fastmcp login

# Deploy the server
fastmcp deploy

# Check deployment status
fastmcp status open-meteo-mcp

The server will be available at https://open-meteo-mcp.fastmcp.cloud

Example Usage

Once connected via MCP, you can ask:

Geocoding (NEW):

  • "Find coordinates for Zurich"

  • "Where is the Matterhorn?"

  • "Search for Interlaken"

Weather Queries:

  • "What's the weather in Bern, Switzerland?"

  • "Show me the 7-day forecast for Zurich"

  • "What's the UV index tomorrow?"

  • "Chance of rain this weekend?"

Air Quality (NEW):

  • "What's the air quality in Zurich?"

  • "Pollen forecast for Bern?"

  • "Is it safe to exercise outdoors today?"

Snow Conditions:

  • "What are the snow conditions in Zermatt?"

  • "Will it snow in the Alps this week?"

  • "Wind conditions at Verbier?"

Ski Trip Planning (uses prompts + resources):

  • "Plan a ski trip to Verbier this weekend"

  • "Compare snow conditions across St. Moritz, Davos, and Zermatt"

Outdoor Activities (uses prompts):

  • "I want to hike the Eiger Trail next week, what's the weather?"

  • "Best days for cycling around Lake Geneva this week?"

  • "Can I go hiking tomorrow? I have allergies" (checks weather + pollen)

Weather Codes

The API returns WMO weather codes. See docs/WEATHER_CODES.md for the complete reference.

Migration from Java

This is version 2.0 of the Open Meteo MCP server, migrated from Java/Spring Boot to Python/FastMCP for:

  • Faster development and iteration

  • Easier deployment with FastMCP Cloud

  • Better integration with the MCP ecosystem

  • Simpler codebase and dependencies

The Java version (v1.x) is archived in the java-v1 branch.

License

MIT License

Credits

Weather data provided by Open-Meteo - Free Open-Source Weather API.

Available Tools

11 tools
compare_locationsA

Compare weather conditions across multiple locations.

Rank locations by specified weather criteria to find the best destination.

Comparison Criteria:

  • best_overall: Overall comfort and conditions

  • warmest: Highest temperature

  • driest: Lowest precipitation probability

  • sunniest: Best weather codes and visibility

  • best_air_quality: Lowest AQI

  • calmest: Lowest wind speeds

Examples:

  • Compare weekend weather between Zurich, Bern, and Geneva

  • Find the warmest location for outdoor activities

  • Identify the driest location for hiking

  • Compare air quality across multiple cities

Use this tool when:

  • Choosing between multiple destination options

  • Planning group activities

  • Finding optimal conditions for specific activities

Args: locations: List of location dicts with 'name', 'latitude', 'longitude' criteria: Comparison criteria (default: 'best_overall') forecast_days: Days to forecast (1-16, default: 1)

Returns: Dictionary containing: - criteria: The comparison criteria used - locations: Ranked list of locations with scores - winner: Best location based on criteria - details: Key weather metrics for each location

ParametersJSON Schema
NameRequiredDescriptionDefault
criteriaNobest_overall
locationsYes
forecast_daysNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden and does substantial work: it enumerates all six comparison criteria with their semantic meanings (e.g., 'driest: Lowest precipitation probability'), describes the ranked output shape, and implies aggregation across multiple locations. It does not disclose potential multi-API-call cost or failure behavior for invalid locations, but the criteria and return-structure detail go well beyond the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-organized with clear bolded headers, a front-loaded summary of purpose, and no wasted sentences in the criteria or args sections. The Examples block is mildly redundant with the criteria and usage sections, making it slightly longer than strictly necessary, but each section still earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 0% schema coverage, no annotations, and a loose input schema, the description must bear the full explanatory load — and it succeeds. It covers every parameter's semantics, defaults, and valid ranges, enumerates all criteria values, explains the output structure (criteria, ranked locations, winner, details), and gives usage scenarios. Nothing needed to invoke the tool correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description fully compensates. For 'locations' it specifies the required dict keys ('name', 'latitude', 'longitude') that the loose 'additionalProperties: true' schema omits. For 'criteria' it documents every valid value with a definition despite no enum in the schema, and for 'forecast_days' it adds the 1-16 valid range beyond the bare integer type.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence states a specific verb and resource — 'Compare weather conditions across multiple locations' and 'Rank locations by specified weather criteria to find the best destination.' This clearly distinguishes it from single-location siblings like get_weather and get_air_quality, and the multi-location scope is explicitly stated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

A dedicated 'Use this tool when' section lists concrete trigger scenarios: choosing between multiple destinations, planning group activities, and finding optimal conditions for specific activities. It provides clear context but does not name alternatives or state when not to use it (e.g., no explicit 'for a single location use get_weather'), so it falls short of the full when/when-not standard.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_air_qualityA

Retrieves air quality forecast including AQI, pollutants, UV index, and pollen data.

Monitor air quality for health-aware outdoor planning, allergy management, and UV exposure assessment. Provides both European and US Air Quality Indices along with detailed pollutant measurements and health interpretations.

Examples:

  • "What's the air quality in Zurich?" → AQI, PM2.5, PM10, ozone levels

  • "Pollen forecast for Bern?" → Grass, birch, alder pollen counts

  • "UV index for tomorrow?" → UV radiation forecast

Provides:

  • European AQI (0-100+) and US AQI (0-500) with health interpretations

  • Particulate matter (PM10, PM2.5)

  • Gases (O3, NO2, SO2, CO, NH3)

  • UV index (current and clear sky)

  • Pollen data (Europe only): alder, birch, grass, mugwort, olive, ragweed

Health Guidelines:

  • European AQI: 0-20 (Good), 20-40 (Fair), 40-60 (Moderate), 60-80 (Poor), 80-100 (Very Poor), 100+ (Extremely Poor)

  • US AQI: 0-50 (Good), 51-100 (Moderate), 101-150 (Unhealthy for Sensitive), 151-200 (Unhealthy), 201-300 (Very Unhealthy), 301-500 (Hazardous)

  • UV Index: 0-2 (Low), 3-5 (Moderate), 6-7 (High), 8-10 (Very High), 11+ (Extreme)

Use this tool when:

  • Planning outdoor activities for people with asthma/allergies

  • Assessing air quality for exercise or sports

  • Checking pollen levels during allergy season

  • Monitoring UV exposure for sun safety

Args: latitude: Latitude in decimal degrees longitude: Longitude in decimal degrees forecast_days: Number of forecast days (1-5, default: 5) include_pollen: Include pollen data (default: true, Europe only) timezone: Timezone for timestamps (default: 'auto')

Returns: Dictionary containing: - current (dict): Current AQI with interpretations, pollutants, UV index - hourly (list[dict]): Hourly air quality forecasts with AQI interpretations - pollen (dict | None): Pollen data if include_pollen=True and location is in Europe - location (dict): Location metadata

ParametersJSON Schema
NameRequiredDescriptionDefault
latitudeYes
timezoneNoauto
longitudeYes
forecast_daysNo
include_pollenNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure and uses it well: it reveals the Europe-only pollen limitation, explains that pollen returns None outside Europe, discloses both EAQI and USAQI interpretation bands, and describes the current/hourly/pollen/location output structure. It does not cover error behavior or data freshness, but the key gotchas an agent needs are disclosed. No contradiction with annotations exists since none are provided.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded — the first sentence states the core function — and uses clear section dividers (Examples, Provides, Health Guidelines, Use this tool when) that make it scannable. It is long, however: the Returns prose partially duplicates the existing output schema, and the full AQI/UV interpretation tables add bulk, so not every sentence strictly earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a five-parameter tool with no annotations and an output schema, the description covers purpose, when-to-use scenarios, paramter semantics, output shape, and an edge case (pollen outside Europe). The notable omission is a cross-reference to the sibling search_location/search_location_swiss tools for resolving the place-based example queris ('Zurich') into the latitude/longitude the API actually requires — a minor but real integration gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description's Args section does the heavy lifting — and it adds genuine meaning: decimal-degree units for coordinates, the 1-5 range for forecast_days, defaults for forecast_days/include_pollen/timezone, and the Europe-only caveat for pollen. This fully compenates for the empty schema. The only gap is that timezone lacks format guidance (e.g., IANA timezone names).

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The opening sentence uses a specific verb and resource — 'Retrieves air quality forecast including AQI, pollutants, UV index, and pollen data' — and enumerates its data contents, making the tool's scope unmistakable. This clearly distinguishes it from sibing tools like get_weather or get_marine_conditions without requiring the agent to open any schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'Use this tool when' section lists four concrete scenarios (asthma/allergy outdoor planning, exercise assessment, pollen checks, UV sun safety) that give an agent clear selection context. However, it stops short of stating when NOT to use it or naming an alternative tool like get_weather for weather-specific queris, so it lacks the explicit exclusions that would earn a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_astronomyA

Provides astronomical data for a location (sunrise, sunset, golden hour).

Useful for photography, event planning, and outdoor activity scheduling.

Data Provided:

  • Sunrise and sunset times

  • Day length

  • Golden hour (best lighting for photography)

  • Blue hour (evening twilight)

  • Moon phase information

  • Best photography windows

Use cases:

  • Photography location scouting

  • Outdoor event planning

  • Sunrise/sunset viewing trips

  • Time-lapse and video production planning

Examples:

  • "When is sunset in Zurich?"

  • "Best time for golden hour photography?"

  • "What's the sunrise time for hiking?"

Args: latitude: Latitude in decimal degrees longitude: Longitude in decimal degrees timezone: Timezone for timestamps (default: 'auto' tries to auto-detect)

Returns: Dictionary containing: - sunrise: Sunrise time (ISO format) - sunset: Sunset time (ISO format) - day_length_hours: Total daylight hours - golden_hour: Start and end times for optimal lighting - blue_hour: Twilight window for photography - moon_phase: Current lunar phase - best_photography_windows: Recommended times for photos

ParametersJSON Schema
NameRequiredDescriptionDefault
latitudeYes
timezoneNoauto
longitudeYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present, so the description carries the behavioral burden. It discloses the provided data fields, the return dictionary structure, and important timezone behavior ('auto' tries to auto-detect). It could mention read-only nature or potential data limitations, but nothing contradicts the operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is longer than average but well-organized with headings, use cases, examples, and return structure. The core purpose is front-loaded, and each section earns its place even if a few examples could be trimmed.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a low-complexity tool with three parameters, the description is complete: it explains data provided, use cases, example queries, parameter semantics, and return fields. The output schema exists, and the description covers the relevant return values, so an agent has enough context to invoke it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the Args section compensates fully by explaining latitude, longitude, and timezone in meaningful terms, including units and the auto-detect behavior of the default timezone. This adds substantial value beyond the raw schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states a specific verb and resource: 'Provides astronomical data for a location (sunrise, sunset, golden hour)'. This clearly distinguishes it from sibling tools like get_weather, get_snow_conditions, and get_air_quality by focusing on astronomy-specific times and photography conditions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear use cases such as photography location scouting, event planning, and sunrise/sunset viewing, plus concrete example queries. It does not explicitly say when not to use it or name alternative tools, but the context is strong enough to guide an agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_comfort_indexA

Calculates outdoor activity comfort index (0-100). Takes latitude, longitude, and timezone parameters.

Combines weather, air quality, UV, and precipitation factors into a single comfort score for planning outdoor activities.

Score Interpretation:

  • 80-100: Perfect for outdoor activities

  • 60-79: Good conditions

  • 40-59: Fair conditions, plan accordingly

  • 20-39: Poor conditions, seek indoor alternatives

  • 0-19: Very poor conditions

Factors Included:

  • Thermal comfort (temperature, humidity, wind chill)

  • Air quality (PM2.5, PM10, AQI)

  • Precipitation risk

  • UV safety (skin protection needs)

  • Weather conditions (storms, visibility)

Examples:

  • "Is it good weather for hiking?"

  • "What's the outdoor comfort level?"

  • "Can I do outdoor sports today?"

Args: latitude: Latitude in decimal degrees longitude: Longitude in decimal degrees timezone: Timezone for timestamps (default: 'auto')

Returns: Dictionary containing: - overall: Comfort index (0-100) - factors: Breakdown of individual factors - recommendation: Text recommendation for activities

ParametersJSON Schema
NameRequiredDescriptionDefault
latitudeYes
timezoneNoauto
longitudeYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations available, the description carries the full burden of behavioral transparency. It goes beyond a simple action by disclosing the scoring scale, the exact factors included, and the return dictionary structure with overall index, factor breakdown, and recommendation. This gives an agent a strong mental model of how the tool behaves.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with sections for score interpretation, factors, examples, args, and returns. It is longer than minimal but every section adds value. There is slight redundancy between the opening summary and the 'Factors Included' list, but overall it remains focused and readable.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description is complete for a 3-parameter tool: it documents all parameters, explains the score range and interpretation, lists contributing factors, provides usage examples, and describes the return value shape. Even without annotations, an agent has enough context to invoke the tool correctly and interpret its result.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has zero description coverage, so the description must compensate. It does so by defining each parameter: latitude and longitude in decimal degrees, and timezone as a timestamp timezone with a default of 'auto'. This adds essential meaning that the schema alone does not provide.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Calculates outdoor activity comfort index (0-100).' It clearly distinguishes itself from sibling weather tools by explaining that it combines weather, air quality, UV, and precipitation into a single derived score, making its purpose unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear usage context through the 'planning outdoor activities' framing and concrete example queries like 'Is it good weather for hiking?' This implies when to use it, but it does not explicitly name alternatives or state when not to use it versus sibling tools.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_historical_weatherA

Retrieves historical weather data for trend analysis and research.

Access 80+ years of historical weather data from Open-Meteo archives.

Use cases:

  • Compare weather patterns year-over-year

  • Climate trend analysis

  • Event planning based on historical patterns

  • Research and academic studies

Examples:

  • "How was the weather in Zurich on this date last year?"

  • "Get average temperatures for July over the past 10 years"

  • "Compare winter snow patterns"

Args: latitude: Latitude in decimal degrees longitude: Longitude in decimal degrees start_date: Start date in ISO format (YYYY-MM-DD) end_date: End date in ISO format (YYYY-MM-DD) include_hourly: Include hourly historical data (default: false) timezone: Timezone for timestamps (default: 'auto')

Returns: Dictionary containing: - historical weather data with temperature, precipitation, wind, etc. - daily summaries (temperature min/max, precipitation, weather codes) - optional hourly data if requested

ParametersJSON Schema
NameRequiredDescriptionDefault
end_dateYes
latitudeYes
timezoneNoauto
longitudeYes
start_dateYes
include_hourlyNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the disclosure burden. It reveals the 80+ year data archive, the effect of include_hourly, date-range inputs, and the shape of the response. It does not mention API limits or the fact that it does not return current conditions, but it is substantially transparent for a read-only historical query tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a clear first sentence, a supporting '80+ years' fact, use cases, examples, Args, and Returns sections. It is longer than minimal, but the length is justified given zero schema descriptions and six parameters to document.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

All required parameters are identifiable, optional behavior is described, and the return structure is outlined. The description gives enough context an agent needs to decide and call the tool correctly, though it could mention maximum date range or timezone semantics explicitly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the Args section is essential. It documents all six parameters, including decimal-degree latitude/longitude, ISO date format, defaults for include_hourly and timezone, although it could have provided more detail like date-range constraints.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a clear verb and resource: 'Retrieves historical weather data' for trend analysis. The word 'historical' differentiates it from current-weather siblings like get_weather, and the use cases and examples reinforce the intended scope.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit use cases and realistic example queries that tell an agent when this tool is appropriate, such as year-over-year comparisons and climate research. However, it does not explicitly contrast it with alternatives or state when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_marine_conditionsA

Retrieves marine conditions for lakes and coastal areas.

Get wave height, swell, period, and wind-driven sea states for water activities.

Examples:

  • Check Lake Geneva conditions for sailing

  • Monitor Zurich Lake for water sports

  • Plan boating activities based on wave forecast

Provides:

  • Wave height (m)

  • Wave direction and period (seconds)

  • Swell characteristics

  • Wind-wave parameters

  • Hourly and daily forecasts

Use this tool when:

  • Planning water sports (sailing, windsurfing, kayaking)

  • Boating safety assessment

  • Recreation planning on Swiss lakes

Args: latitude: Latitude in decimal degrees longitude: Longitude in decimal degrees forecast_days: Number of forecast days (1-16, default: 7) include_hourly: Include hourly data (default: true) timezone: Timezone for timestamps (default: 'auto')

Returns: Dictionary containing: - wave_height, wave_direction, wave_period - swell wave data - wind-wave parameters - hourly and daily forecasts

ParametersJSON Schema
NameRequiredDescriptionDefault
latitudeYes
timezoneNoauto
longitudeYes
forecast_daysNo
include_hourlyNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full disclosure burden. It transparently details what data is returned (wave height in meters, direction, period, swell, wind-wave parameters, hourly/daily forecasts) and the return container. It does not discuss limitations like geographic scope, update frequency, or data source, but for a read-only retrieval tool the behavioral disclosure is strong.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is organized into clear sections (summary, examples, provides, use-case, args, returns) and is front-loaded with the core purpose. The examples and use-case list add practical context, though the content is somewhat longer than strictly necessary for an agent to invoke the tool correctly.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 5 parameters, no schema-level descriptions, and an output schema, the description adequately covers invocation details: required and optional parameters, defaults, ranges, and returned fields. It could be more complete by stating the exact geographic coverage and any data-source caveats, but nothing essential for calling the tool is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has zero parameter descriptions, so the description's Args block provides all semantic meaning. It explains latitude and longitude in decimal degrees, gives the valid range and default for forecast_days (1-16, default 7), and clarifies the boolean and timezone defaults. This fully compensates for the sparse schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb and resource: 'Retrieves marine conditions for lakes and coastal areas,' clearly distinguishing it from general weather tools. It further specifies the data domain (wave height, swell, period, wind-wave states) and provides concrete examples, so an agent can immediately tell it apart from siblings like get_weather and get_snow_conditions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'Use this tool when' section explicitly lists water sports planning, boating safety, and recreation planning on Swiss lakes, giving clear guidance on appropriate contexts. However, it does not explicitly state when not to use it or name alternative tools, so it stops short of a full 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_snow_conditionsA

Retrieves snow conditions and forecasts for mountain locations.

Parameters:

  • latitude (required): Latitude in decimal degrees

  • longitude (required): Longitude in decimal degrees

  • forecast_days (optional): Number of forecast days (1-16, default: 7)

  • include_hourly (optional): Include hourly data (default: true)

  • timezone (optional): Timezone for timestamps (default: "Europe/Zurich")

Returns:

  • Current snow depth (meters)

  • Recent snowfall (cm)

  • Forecast snowfall

  • Temperature trends

  • Hourly and daily snow data

  • Enriched with ski condition assessment

Use this tool for:

  • Ski trip planning

  • Checking snow conditions at resorts

  • Mountain weather forecasts

  • Avalanche risk assessment (via snow depth trends)

Args: latitude: Latitude in decimal degrees (e.g., 45.9763 for Zermatt) longitude: Longitude in decimal degrees (e.g., 7.6586 for Zermatt) forecast_days: Number of forecast days (1-16, default: 7) include_hourly: Include hourly data (default: true) timezone: Timezone for timestamps (default: 'Europe/Zurich')

Returns: Dictionary containing: - current (dict): Current snow depth and recent snowfall with ski assessment - hourly (list[dict] | None): Hourly snow data if include_hourly=True - daily (list[dict]): Daily snow forecasts with accumulation and temperature - location (dict): Mountain location metadata

ParametersJSON Schema
NameRequiredDescriptionDefault
latitudeYes
timezoneNoEurope/Zurich
longitudeYes
forecast_daysNo
include_hourlyNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full disclosure burden and largely meets it: it reveals default behaviors (7 forecast days, hourly included, Europe/Zurich timezone), the enriched 'ski condition assessment' computation, and the exact return structure. It omits data-source provenance and latency, but for a read-only retrieval tool these are minor; no hidden mutation or destructive behavior exists to warn about.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness3/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The content is useful and well-structured with bold headers, but it is redundant: the parameter list and returns are documented twice (once in the overview, again in the Args/Returns block). The same information spans roughly double the needed length, which dilutes front-loading.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 5-parameter tool with zero schema descriptions and no annotations, the description is nearly self-sufficient: it explains all required and optional parameters, supplies defaults and examples, documents the nested return structure, and gives use cases. The only notable omission is guidance on coordinate validation or how this tool relates to get_weather when planning is not ski-specific.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, and it does: every parameter is explained with a natural-language meaning, a default value, and concrete examples (45.9763 / 7.6586 for Zermatt), plus the 1-16 range for forecast_days that the schema does not convey. Minor gap: latitude/longitude valid ranges are not stated.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific verb+resource statement: 'Retrieves snow conditions and forecasts for mountain locations.' Combined with the use-case list (ski trip planning, resort checks, avalanche risk assessment), it clearly differentiates from siblings like get_weather and get_historical_weather by scope and location type.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'Use this tool for' section provides concrete invocation contexts (ski trip planning, checking resort conditions, mountain weather forecasts, avalanche risk assessment), which is clear contextual guidance. However, it never names alternatives or states when NOT to use it, so an agent could still confuse it with get_weather for general mountain forecasts.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_weatherA

Retrieves weather forecast for a location (temperature, rain, sunshine).

Get current weather conditions for any location in Switzerland (or worldwide).

Examples:

  • "What's the weather in Zürich?" → latitude: 47.3769, longitude: 8.5417

  • "Weather at destination" → Use coordinates from journey endpoint

  • "Is it raining in Bern?" → Check precipitation field

Provides:

  • Current temperature (°C)

  • Weather condition (clear, cloudy, rain, snow)

  • Precipitation amount (mm)

  • Wind speed (km/h)

  • Humidity (%)

  • Hourly and daily forecasts

  • Enriched with weather interpretation and formatting

Data Source: Open-Meteo API (free, no API key required)

Performance: < 200ms

Use this tool when:

  • User asks about weather conditions

  • Planning outdoor activities

  • Checking if weather affects travel

  • Combined with journey planning

Args: latitude: Latitude in decimal degrees (e.g., 46.9479 for Bern) longitude: Longitude in decimal degrees (e.g., 7.4474 for Bern) forecast_days: Number of forecast days (1-16, default: 7) include_hourly: Include hourly forecasts (default: true) timezone: Timezone for timestamps (e.g., 'Europe/Zurich', default: 'auto')

Returns: Dictionary containing: - current (dict): Current weather with temperature, weather_code, wind_speed, humidity - current_weather (dict): Enriched current conditions with interpretation, formatting - hourly (list[dict] | None): Hourly forecasts if include_hourly=True - daily (list[dict]): Daily forecasts with min/max temps, precipitation, weather codes - location (dict): Location metadata with coordinates and timezone

ParametersJSON Schema
NameRequiredDescriptionDefault
latitudeYes
timezoneNoauto
longitudeYes
forecast_daysNo
include_hourlyNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and does it well: it discloses the Open-Meteo data source, no API key requirement, sub-200ms performance, enriched interpretation/formatting, and the return structure. It also implies read-only behavior by describing a forecast retrieval operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with a one-sentence summary and then well-structured into Examples, Provides, Data Source, Performance, Use this tool when, Args, and Returns. It is longer than strictly necessary because 'Provides' and 'Returns' partially overlap, but every section adds useful decision or invocation context.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description, combined with the output schema, covers what the tool does, when to use it, how to provide each parameter, what the response contains, and operational details like data source and performance. There are no significant missing pieces an agent would need to call it correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has zero description coverage, but the Args section adds example coordinates, decimal-degree context, the valid 1-16 range for forecast_days, defaults for include_hourly and timezone, and the meaning of timezone for timestamps. This fully compensates for the schema gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('retrieves') and resource ('weather forecast for a location'), and enumerates concrete output fields (temperature, rain, sunshine, wind, humidity). It clearly identifies this as the general weather tool rather than snow, air quality, alerts, historical, or marine conditions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

A dedicated 'Use this tool when' section lists concrete triggers: weather questions, outdoor activities, travel impact, and journey planning. It gives clear context but does not explicitly name sibling alternatives or state when not to use this tool, so it stops short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_weather_alertsA

Generate weather alerts based on thresholds and current forecast.

Automatically identifies severe weather conditions and generates actionable alerts.

Alert Types:

  • Heat warnings (temperature > 30°C for 3+ hours)

  • Cold warnings (temperature < -10°C)

  • Storm warnings (wind gusts > 80 km/h or thunderstorms)

  • UV warnings (UV index > 8)

  • Wind advisories (gusts 50-80 km/h)

Severity Levels:

  • Advisory: Precautionary, plan accordingly

  • Watch: Conditions favorable for alert type

  • Warning: Conditions expected, take precautions

Examples:

  • Check for heat waves during summer

  • Monitor for storms before outdoor events

  • Plan sun protection based on UV alerts

Args: latitude: Latitude in decimal degrees longitude: Longitude in decimal degrees forecast_hours: Hours to check for alerts (1-168, default: 24) timezone: Timezone for timestamps (default: 'auto')

Returns: Dictionary containing: - latitude, longitude: Location coordinates - timezone: Timezone name - alerts (list): List of active alerts with type, severity, timing, and recommendations

ParametersJSON Schema
NameRequiredDescriptionDefault
latitudeYes
timezoneNoauto
longitudeYes
forecast_hoursNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.7/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotation coverage, the description carries the full behavioral burden and does so thoroughly: it specifies exact thresholds for each alert type, defines the three severity levels, and explains that alerts are generated from forecast conditions. It also outlines the return structure, making the tool's behavior predictable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-organized with a front-loaded summary, structured bullet lists, and clearly separated sections. The examples add some value but are partially redundant with the alert-type list, so the text is not perfectly tight.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers purpose, threshold behavior, severity semantics, all parameters and defaults, and return fields, complementing the output schema. The only minor gap is coordinate range validation, but for normal invocation the information is complete enough for an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description compensates fully by documenting all four parameters with operational meaning: latitude/longitude in decimal degrees, forecast_hours with range and default, and timezone with default. This is exactly the semantic detail the schema alone lacks.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb ('Generate') and resource ('weather alerts'), and explains the tool derives alerts from thresholds and forecast rather than raw observations. The alert-type list and severity levels further distinguish it from siblings like get_weather, which would return current conditions without alert generation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Example scenarios ('Check for heat waves during summer,' 'Monitor for storms before outdoor events') give clear usage context. It does not explicitly name alternative tools or state when not to use this tool, so it lacks the exclusionary guidance needed for a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_locationA

Searches for locations by name to get coordinates for weather queries.

Convert location names to coordinates using fuzzy search. Essential for natural language weather queries like "weather in Zurich" instead of requiring latitude/longitude coordinates.

Examples:

  • "Zurich" → Returns Zurich, Switzerland with coordinates

  • "Bern" → Returns multiple matches (Bern CH, Bern US, etc.)

  • "Zermatt" → Returns ski resort with elevation data

  • "Lake Geneva" → Returns lake coordinates

Features:

  • Fuzzy matching (handles typos)

  • Multi-language support

  • Country filtering (e.g., country="CH" for Switzerland only)

  • Returns population, timezone, elevation

  • Enriched with feature type descriptions and elevation categories

Workflow:

  1. Search for location by name

  2. Select result (usually first is best match)

  3. Use latitude/longitude for get_weather or get_snow_conditions

Use this tool when:

  • User provides location name instead of coordinates

  • Need to find coordinates for a city, mountain, or landmark

  • Want to discover locations in a specific country

Args: name: Location name to search (e.g., 'Zurich', 'Eiger', 'Lake Lucerne') count: Number of results to return (1-100, default: 10) language: Language for results (default: 'en', options: 'de', 'fr', 'it', etc.) country: Optional country code filter (e.g., 'CH' for Switzerland, 'DE' for Germany)

Returns: Dictionary containing: - results (list[dict]): List of matching locations, each with: - name (str): Location name - latitude (float): Latitude coordinate - longitude (float): Longitude coordinate - elevation (float | None): Elevation in meters - country (str): Country code - timezone (str): Timezone identifier - population (int | None): Population if applicable - feature_type_description (str): Type of location (City, Mountain, Lake, etc.) - elevation_category (str): Low, Medium, High, or Very High

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
countNo
countryNo
languageNoen

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden. It discloses fuzzy matching, multi-language support, country filtering, and richer outputs (population, timezone, elevation, feature type, elevation category), plus examples of multiple matches. It doesn't cover error cases or rate limits, but for a read-only search tool this is substantial.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is long but organized into scannable sections with the core purpose front-loaded. Some redundancy exists between the Features list and the Returns section, but each section adds contextual value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers purpose, triggers, workflow, parameter details, and return structure in depth. An output schema is present, and the description still documents the returned dictionary fields. Because it doesn't mention the sibling search_location_swiss or error behavior, it stops short of complete, but it is more than sufficient for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has 0% description coverage, so the description must compensate. The Args section provides detailed semantics for every parameter: name examples, count range (1-100), language options, and country code examples. This exceeds what the bare schema types convey.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource: 'Searches for locations by name to get coordinates for weather queries.' The examples and features clarify it converts names to coordinates. However, it does not explicitly differentiate itself from the sibling search_location_swiss tool, which would earn a 5.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Includes a dedicated 'Use this tool when' section listing three concrete triggers (location name instead of coordinates, need coordinates for a city/mountain/landmark, discover locations in a country). Also provides a three-step workflow leading to get_weather/get_snow_conditions. It lacks an explicit 'when not to use' or a comparison to search_location_swiss.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_location_swissA

Search for locations in Switzerland with optional geographic features.

Specialized search for Swiss locations including cities, mountains, lakes, and passes.

Feature Types Supported:

  • PPL: Populated places (cities, towns, villages)

  • MT: Mountains and peaks

  • LK: Lakes and water bodies

  • PS: Mountain passes

  • STM: Streams and rivers

Examples:

  • "Find Zurich" → Zurich city

  • "Search for Matterhorn" → Mountain peak

  • "Find Lake Geneva" → Lake location

  • "Find Gotthard Pass" → Mountain pass

Use this tool when:

  • Searching specifically within Switzerland

  • Looking for mountains, lakes, or geographic features

  • Need precise coordinates for Swiss locations

  • Want to filter by location type

Args: name: Location name to search include_features: Include geographic features like mountains, lakes (default: false) language: Language for results (de, fr, it, en; default: en) count: Number of results (1-50, default: 10)

Returns: Dictionary containing: - results: List of matching Swiss locations with enriched metadata - total: Number of results found - country: Country code (CH) - include_features: Whether geographic features are included - language: Language of results

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYes
countNo
languageNoen
include_featuresNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must carry the behavioral disclosure burden. It does disclose defaults for include_features, language, and count, plus return fields, but it never reconciles the default false of include_features with examples like 'Search for Matherhorn → Mountain peak', leaving the required configuration ambiguous.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Markdown sections — Feature Types, Examples, Use this tool when, Args, Returns — make the description scannable, and the purpose is front-loaded in the first sentence. A few sentences repeat the same idea, but no major section is wasteful.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers inputs, defaults, examples, and returns well for a tool with one required parameter. It is incomplete because it never tells the agent when to prefer this tool over the sibling search_location, and it does not clarify how include_features must be set for the feature-type examples to work.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0% description coverage, but the Args section fully compensates: all four parameters are explained, language values are enumerated (de, fr, it, en), count is bounded (1-50), and default behavior is stated. This adds substantial meaning beyond the raw schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with 'Search for locations in Switzerland...' and reinforces 'Specialized search for Swiss locations', naming populated places, mountains, lakes, and passes. This clearly distinguishes it from the generic sibling search_location by geographic scope and feature focus.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The 'Use this tool when' section provides concrete selection criteria: searching in Switzerland, seeking geographic features, needing coordinates, and filtering by location type. However, it does not explicitly exclude non-Swiss searches or point to search_location as the alternative, and the 'filter by location type' bullet implies a type parameter not present in the schema.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 11 tool updatesv3.3.0
    • First observedcompare_locations
    • First observedget_air_quality
    • First observedget_astronomy
    • First observedget_comfort_index
    • First observedget_historical_weather
    • First observedget_marine_conditions
    • First observedget_snow_conditions
    • First observedget_weather
    • First observedget_weather_alerts
    • First observedsearch_location
    • First observedsearch_location_swiss

TDQS

A4.2/5.0
Disambiguation3/5

Most tools are aimed at distinct domains, but there is meaningful overlap: get_weather, get_snow_conditions, and get_marine_conditions all provide weather-type data for different contexts, and get_comfort_index/get_weather_alerts derive from the same underlying forecast data. search_location and search_location_swiss are especially easy to confuse despite the Swiss-specific scope being documented.

Naming Consistency5/5

All tool names follow a clear lowercase snake_case verb_noun pattern: get_* for data retrieval, search_* for location lookups, and compare_locations for comparison. The style is consistent and predictable across the entire set.

Tool Count4/5

Eleven tools is a reasonable size for a comprehensive weather/meteorology server. The count is not excessive, though a couple of tools (search_location_swiss, comfort_index) are arguably conveniences that overlap with or combine the functionality of other tools.

Completeness4/5

The server covers current weather, forecasts, historical data, air quality, marine conditions, astronomy, alerts, and location search, which is broad coverage for the weather domain. Minor gaps exist, such as no dedicated tool for official severe weather warnings and the lack of a reverse geocoding lookup, but agents can work around these.

Maintenance

ActivityInactive
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    Provides comprehensive access to Open-Meteo APIs for weather forecasts, historical data, air quality, and marine conditions. It enables LLMs to query specialized meteorological models, perform geocoding, and access advanced climate or flood projections.
    17
    524
    66
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Provides comprehensive access to Open-Meteo weather APIs, including forecasts, historical data, air quality, marine weather, and geocoding, enabling LLMs to retrieve weather information and location data.
    17
    524
    1
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/schlpbch/open-meteo-mcp-py'

If you have feedback or need assistance with the MCP directory API, please join our Discord server