Skip to main content
Glama

IPMA Weather MCP Server (Python)

A comprehensive Model Context Protocol (MCP) server providing access to Portuguese weather data from IPMA (Instituto Português do Mar e da Atmosfera).

Data Source

All data is provided by IPMA (Instituto Português do Mar e da Atmosfera, I.P.)

  • API Documentation: https://api.ipma.pt/

  • Weather forecasts are updated twice daily (00 UTC and 12 UTC)

  • Times are in UTC (add 0h in winter, +1h in summer for Continental Portugal/Madeira; -1h in winter, 0h in summer for Azores)

Related MCP server: IPMA MCP Server

Features

This MCP server provides complete access to the IPMA API with the following tools:

🌦️ Weather Forecasts

  1. get_forecast - 5-day weather forecast for Portuguese cities

    • Detailed daily forecasts including temperature, precipitation, wind

    • Supports all Portuguese cities and islands (Madeira and Azores)

  2. get_daily_aggregate_forecast - Daily aggregated forecast for all locations

    • Get forecasts for all Portugal in a single query

    • Supports up to 3 days (today, tomorrow, day after tomorrow)

⚠️ Weather Warnings

  1. get_weather_warnings - Active meteorological warnings (up to 3 days)

    • Warning types: precipitation, wind, fog, maritime agitation, snow, thunderstorms, etc.

    • Awareness levels: green (normal), yellow, orange, red

    • Includes affected areas and time periods

🌊 Sea State

  1. get_sea_forecast - Sea state forecast for coastal areas (up to 3 days)

    • Wave height, wave period, wave direction

    • Sea surface temperature

    • Covers all Portuguese coastal locations

🔥 Fire Risk

  1. get_fire_risk - Fire risk forecast (up to 2 days)

    • RCM (Risco de Incêndio) classification for all municipalities

    • Risk levels: Low, Moderate, High, Very High, Maximum

☀️ UV Index

  1. get_uv_forecast - UV radiation index forecast (up to 3 days)

    • UV index levels from Low to Extreme

    • Protection recommendations included

🌡️ Weather Stations

  1. get_station_observations - Meteorological observations from weather stations

    • Last 24 hours of hourly data

    • Temperature, humidity, pressure, wind, precipitation, radiation

🔍 Seismic Data

  1. get_seismic_data - Seismic activity information (last 30 days)

    • Coverage: Continental Portugal, Azores, Madeira

    • Filter by region

📚 Reference Data

  1. list_available_cities - List all available locations

    • Complete list of cities and islands

    • Grouped by region (Continental, Madeira, Azores)

  2. get_weather_type_descriptions - Weather type code descriptions

    • Portuguese and English descriptions

    • Helps interpret weather type IDs in forecasts

Installation

  1. Install dependencies:

pip install -e .
  1. Configure your MCP client to use this server:

For Claude Desktop, add to your config file:

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

{
    "mcpServers": {
        "weather": {
            "command": "python",
            "args": ["-m", "weather"],
            "cwd": "/path/to/weather-server-python"
        }
    }
}

Or use uv for better environment management:

{
    "mcpServers": {
        "weather": {
            "command": "uv",
            "args": ["run", "weather"],
            "cwd": "/path/to/weather-server-python"
        }
    }
}

Usage Examples

Once configured, you can ask Claude questions like:

  • "What's the weather forecast for Lisboa?"

  • "Are there any active weather warnings in Portugal?"

  • "What's the sea state forecast for Porto coast tomorrow?"

  • "Show me the fire risk for today"

  • "What are the UV levels for the next 3 days?"

  • "Get observations from weather station 1210881"

  • "List all available Portuguese cities"

  • "What seismic activity has been recorded in the Azores?"

API Coverage

This server implements all main IPMA open data endpoints:

✅ Avisos Meteorológicos até 3 dias
✅ Previsão Meteorológica Diária até 5 dias agregada por Local
✅ Previsão Meteorológica Diária até 3 dias, informação agregada por dia
✅ Informação sismicidade, últimos 30 dias (Açores, Continente, Madeira)
✅ Previsão do Estado do Mar até 3 dias, informação agregada por dia
✅ Previsão do Risco de Incêndio até 2 dias, informação agregada por dia
✅ Previsão do Risco de Ultravioletas até 3 dias (Índice Ultravioleta)
✅ Observação Meteorológica de Estações (dados horários, últimas 24 horas)

Integrating with Open WebUI

The IPMA MCP server can be integrated with Open WebUI (v0.6+) using mcpo (MCP-to-OpenAPI proxy), which bridges the stdio-based MCP server to REST endpoints accessible by Open WebUI.

Quick Start with install.sh

We provide an installation helper script to set up the environment:

# Make the script executable
chmod +x install.sh

# Run the installation
./install.sh

The script will:

  • Install uv if not already present

  • Create a virtual environment

  • Install all dependencies

  • Verify the installation

Manual Setup

1. Prerequisites

  • Open WebUI installed and running (e.g., via Docker):

    docker run -d -p 3000:8080 --add-host=host.docker.internal:host-gateway \
      -v open-webui:/app/backend/data \
      -e OLLAMA_BASE_URL=http://host.docker.internal:11434 \
      --name open-webui --restart always \
      ghcr.io/open-webui/open-webui:main
  • Python 3.10+ with uv (install via curl -LsSf https://astral.sh/uv/install.sh | sh)

  • Clone this repository

2. Set Up Virtual Environment

cd /path/to/ipma-mcp-server
uv venv
source .venv/bin/activate  # On Windows: .venv\Scripts\activate
uv pip install -e .

3. Test the MCP Server

Run the server directly (it uses stdio transport by default):

uv run python weather.py

This starts the MCP server locally. Press Ctrl+C to stop.

4. Launch mcpo Proxy

Install mcpo (Open WebUI's official MCP-to-OpenAPI proxy):

uv tool install mcpo

Proxy the MCP server to OpenAPI on port 8000 (use a secure API key):

uvx mcpo --port 8000 --api-key "your-secret-key" -- uv run python weather.py
  • Test: Visit http://localhost:8000/docs for the auto-generated OpenAPI schema

  • All IPMA tools should appear in the documentation

Docker Alternative:

docker run -p 8000:8000 -v /path/to/ipma-mcp-server:/app \
  ghcr.io/open-webui/mcpo:main \
  --api-key "your-secret-key" -- python /app/weather.py

5. Add to Open WebUI

  • Open your Open WebUI instance (e.g., http://localhost:3000)

  • Go to Settings (gear icon) > Tools (or Admin Panel > External Tools if admin)

  • Click + Add Tool Server

  • Configure:

    • Type: OpenAPI (or MCP Streamable HTTP if available)

    • URL: http://localhost:8000 (full base URL)

    • Auth: Bearer token with your API key (your-secret-key)

  • Save and restart Open WebUI if prompted

Integration Architecture

Open WebUI (Port 3000)
    ↓ HTTP REST calls
mcpo Proxy (Port 8000)
    ↓ stdio JSON-RPC
IPMA MCP Server (weather.py)
    ↓ HTTPS
IPMA API (api.ipma.pt)

For full MCP documentation, see the Open WebUI MCP Guide.

License

See the Quickstart tutorial for more information about MCP.

Available Tools

10 tools
get_daily_aggregate_forecastA

Get daily aggregated weather forecast for Portugal (Previsão Meteorológica até 3 dias, agregada por dia).

Args:
    day: Forecast day (0=today, 1=tomorrow, 2=day after tomorrow). Valid range: 0-2

Returns aggregated forecast for all Portuguese locations for the specified day.
ParametersJSON Schema
NameRequiredDescriptionDefault
dayNo

TDQS

A4.3/5.0
Behavior3/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. It describes the aggregation scope ('aggregated forecast for all Portuguese locations') and temporal constraints ('until 3 days'), which adds useful context beyond basic functionality. However, it does not cover aspects like rate limits, authentication needs, error conditions, or response format details, leaving gaps for a tool with no annotation support.

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

Conciseness5/5

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

The description is appropriately sized and front-loaded, with the core purpose stated first, followed by parameter details and return clarification. Every sentence earns its place by adding value—no redundant or vague phrasing. The structure efficiently communicates key information without waste.

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 the tool's moderate complexity (1 parameter, no output schema, no annotations), the description is largely complete. It covers purpose, parameter semantics, and scope well. However, it lacks details on the return format (e.g., structure of aggregated data) and any behavioral constraints like rate limits, which would enhance completeness for a forecast tool with no structured output documentation.

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 description adds significant meaning beyond the input schema, which has 0% description coverage. It explains the 'day' parameter's semantics (forecast day with 0=today mapping), valid range (0-2), and clarifies it returns aggregated data for the specified day. This fully compensates for the schema's lack of documentation, providing essential usage context that the schema alone does not convey.

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 clearly states the specific action ('Get daily aggregated weather forecast'), resource ('for Portugal'), and scope ('aggregated forecast for all Portuguese locations'), distinguishing it from siblings like get_forecast (likely more granular) or get_sea_forecast (different domain). It provides a precise verb+resource combination with explicit geographical and aggregation boundaries.

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 implicitly suggests usage for daily aggregated forecasts in Portugal, but does not explicitly state when to use this tool versus alternatives like get_forecast or list_available_cities. It provides clear context (Portugal, aggregated, 3-day forecast) but lacks explicit exclusions or named alternatives, missing the highest tier of guidance.

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

get_fire_riskA

Get fire risk forecast for Portugal (Previsão Risco de Incêndio até 2 dias).

Args:
    day: Forecast day (0=today, 1=tomorrow). Valid range: 0-1

Returns fire risk classification (RCM - Risco de Incêndio) for Portuguese municipalities.
Fire risk levels: 1=Low, 2=Moderate, 3=High, 4=Very High, 5=Maximum
ParametersJSON Schema
NameRequiredDescriptionDefault
dayNo

TDQS

A4/5.0
Behavior3/5

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

With no annotations provided, the description carries full burden. It discloses key behavioral aspects: geographic limitation (Portugal only), temporal scope (2-day forecast), and return format (RCM classification with level definitions). However, it doesn't mention rate limits, authentication requirements, data freshness, or error conditions that would be helpful for an agent.

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 clear sections (purpose, args, returns) and efficiently conveys necessary information. Every sentence earns its place, though the fire risk levels could be presented more concisely. The information is appropriately front-loaded with the core purpose first.

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 single-parameter tool with no annotations and no output schema, the description provides good coverage: clear purpose, parameter documentation, return format explanation, and classification scale. It could be more complete by mentioning data source, update frequency, or municipality granularity, but covers the essentials well given the tool's simplicity.

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 description adds significant value beyond the input schema, which has 0% description coverage. It fully documents the single parameter 'day' with its semantics (forecast day), valid values (0-1), and meaning (0=today, 1=tomorrow). This completely compensates for the schema's lack of documentation.

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 clearly states the tool's purpose with specific verb ('Get'), resource ('fire risk forecast'), and geographic scope ('for Portugal'). It distinguishes from siblings by focusing specifically on fire risk rather than general weather, seismic, or UV forecasts. The title 'Previsão Risco de Incêndio até 2 dias' reinforces the specific domain.

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

Usage Guidelines3/5

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

The description implies usage context through the geographic limitation ('for Portugal') and temporal scope ('until 2 days'), but doesn't explicitly state when to use this tool versus alternatives like get_forecast or get_weather_warnings. No guidance is provided about when this tool is preferred over sibling tools for fire-related queries.

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

get_forecastA

Get 5-day weather forecast for a Portuguese city (Previsão Meteorológica até 5 dias).

Args:
    city_name: Name of the Portuguese city (e.g. Lisboa, Porto, Faro, Aveiro, Braga)

Returns detailed 5-day forecast including temperature, precipitation, wind, and weather type.
ParametersJSON Schema
NameRequiredDescriptionDefault
city_nameYes

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations provided, the description carries full burden. It discloses the 5-day time horizon and forecast components (temperature, precipitation, wind, weather type), which are useful behavioral traits. However, it doesn't mention rate limits, authentication needs, data freshness, or error conditions. The description adds some value but leaves significant behavioral aspects undocumented.

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

Conciseness5/5

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

The description is efficiently structured with a clear purpose statement, parameter documentation, and return value description in just three sentences. Every sentence adds value: the first states what the tool does, the second documents the single parameter with examples, and the third describes the output. No wasted words.

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?

Given no annotations and no output schema, the description provides adequate basic information about purpose and parameters but lacks details about return format structure, error handling, or behavioral constraints. For a weather forecasting tool with no structured metadata, the description should ideally include more about data sources, update frequency, or validation rules to be fully complete.

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?

With 0% schema description coverage and only 1 parameter, the description provides essential semantic context: it explains city_name must be a Portuguese city name and gives concrete examples (Lisboa, Porto, Faro, Aveiro, Braga). This compensates well for the schema's lack of description, though it doesn't specify format constraints like case sensitivity or special characters.

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 clearly states the specific action ('Get 5-day weather forecast'), resource ('for a Portuguese city'), and scope ('detailed 5-day forecast including temperature, precipitation, wind, and weather type'). It distinguishes from siblings like get_fire_risk or get_sea_forecast by focusing on comprehensive 5-day weather forecasts rather than specialized data.

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

Usage Guidelines3/5

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

The description implies usage for Portuguese cities with the example list, but doesn't explicitly state when to use this tool versus alternatives like get_daily_aggregate_forecast or get_weather_warnings. The Portuguese city constraint is mentioned, but no guidance on exclusions or specific scenarios where this tool is preferred over siblings.

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

get_sea_forecastA

Get sea state forecast for Portuguese coastal areas (Previsão Estado do Mar até 3 dias).

Args:
    location_name: Name of coastal location (e.g., 'Porto', 'Lisboa', 'Faro', 'Funchal', 'Leiria').
                  Leave empty to see all available locations.
    day: Forecast day (0=today, 1=tomorrow, 2=day after tomorrow). Valid range: 0-2

Returns sea state forecast including wave height, period, direction, and sea temperature.
ParametersJSON Schema
NameRequiredDescriptionDefault
location_nameNo
dayNo

TDQS

A3.7/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden but lacks critical behavioral details. It doesn't mention rate limits, authentication requirements, data freshness, error conditions, or whether this is a read-only operation. The description only covers basic functionality without operational context.

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 appropriately sized with clear sections: purpose statement, parameter explanations, and return value description. Every sentence adds value, though the Portuguese parenthetical could be considered slightly extraneous. The structure is front-loaded with the core purpose.

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?

Given no annotations and no output schema, the description provides adequate basic information about what the tool does and its parameters, but lacks details about return format structure, error handling, and operational constraints. For a forecast tool with two parameters, it's minimally viable but leaves gaps in behavioral context.

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 description adds substantial value beyond the schema's 0% coverage. It explains that location_name can be left empty to see all available locations, provides concrete examples of valid values, defines the day parameter's encoding (0=today, 1=tomorrow, 2=day after tomorrow), and specifies the valid range. This compensates fully for the schema's lack of descriptions.

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 clearly states the specific action ('Get sea state forecast'), resource ('Portuguese coastal areas'), and temporal scope ('up to 3 days'). It distinguishes from siblings by focusing on sea state rather than weather, fire risk, seismic data, or other forecast types mentioned in the sibling list.

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

Usage Guidelines3/5

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

The description implies usage through its parameter explanations (e.g., 'Leave empty to see all available locations'), but doesn't explicitly state when to use this tool versus alternatives like 'get_forecast' or 'get_daily_aggregate_forecast'. No guidance on exclusions or prerequisites is provided.

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

get_seismic_dataA

Get seismic activity data for Portugal (Informação sismicidade, últimos 30 dias).

Args:
    region: Region to filter ('all', 'continente', 'açores', 'madeira'). 
            Default is 'all' for all regions.

Note: This endpoint returns the last 30 days of seismic information for 
Azores Archipelago, Continental Portugal, and Madeira Archipelago.
ParametersJSON Schema
NameRequiredDescriptionDefault
regionNoall

TDQS

A3.5/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden. It discloses the 30-day time window constraint and geographic scope, but lacks critical behavioral details: whether this is a read-only operation, rate limits, authentication needs, error conditions, or response format. The description adds some context but leaves significant gaps for a data retrieval 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 appropriately sized and well-structured with clear sections: purpose statement, Args section with parameter details, and a Note with additional context. Every sentence adds value, though the Portuguese/English mix slightly affects readability. The information is front-loaded with the core purpose first.

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?

Given no annotations and no output schema, the description provides adequate context for a simple single-parameter query tool. It covers purpose, parameter semantics, and geographic/temporal scope. However, it lacks information about response format, error handling, and operational constraints that would be important for complete understanding.

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 description provides comprehensive parameter semantics despite 0% schema description coverage. It fully documents the single parameter 'region' with its purpose, allowed values ('all', 'continente', 'açores', 'madeira'), default value ('all'), and meaning. This completely compensates for the schema's lack of descriptions.

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?

The description clearly states the tool's purpose: 'Get seismic activity data for Portugal' with specific scope ('últimos 30 dias'). It distinguishes from siblings by focusing on seismic data rather than weather, fire, or forecasts. However, it doesn't explicitly differentiate from potential seismic siblings (none exist in this server).

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

Usage Guidelines3/5

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

The description implies usage context ('últimos 30 días') and mentions geographic scope (Azores, Continental Portugal, Madeira), but provides no explicit guidance on when to use this tool versus alternatives. No sibling tools overlap in domain, so differentiation isn't needed, but general usage context is only implied.

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

get_station_observationsA

Get meteorological observations from weather stations (Observações últimas 24 horas).

Args:
    station_id: ID of the weather station. Leave empty to see all stations.

Returns hourly meteorological observations from the last 24 hours including:
- Temperature
- Humidity  
- Pressure
- Wind speed and direction
- Precipitation
- Radiation
ParametersJSON Schema
NameRequiredDescriptionDefault
station_idNo

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations provided, the description carries full burden. It discloses the temporal scope (last 24 hours, hourly data) and data format (list of meteorological variables), but doesn't mention rate limits, authentication needs, error conditions, or pagination behavior for the 'all stations' case.

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 appropriately sized and front-loaded with the core purpose. The bulleted list of return values is useful but could be slightly more concise. Every sentence adds value, though the Portuguese parenthetical could be integrated more smoothly.

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 single-parameter read operation with no output schema, the description provides good coverage: purpose, parameter semantics, return data structure, and temporal scope. It lacks some behavioral details (like error handling) but is reasonably complete given the tool's moderate complexity.

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 description adds significant value beyond the schema's 0% coverage. It explains that station_id is optional ('Leave empty to see all stations') and clarifies the parameter's purpose ('ID of the weather station'), which the schema only labels generically as 'Station Id'.

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 clearly states the specific action ('Get meteorological observations') and resource ('from weather stations'), with explicit scope ('last 24 hours', 'hourly'). It distinguishes from siblings like forecast tools by focusing on historical observations rather than predictions.

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 context about when to use this tool (for recent observational data) and implies when not to use it (for forecasts, aggregates, or other data types covered by siblings). However, it doesn't explicitly name alternatives or state exclusions.

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

get_uv_forecastA

Get UV index forecast for Portugal (Previsão Índice Ultravioleta até 3 dias).

Returns UV radiation index forecast for Portuguese locations.
UV Index levels:
- 0-2: Low
- 3-5: Moderate
- 6-7: High
- 8-10: Very High
- 11+: Extreme
ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/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. It describes the return format (UV index forecast with defined levels) and geographic scope, but lacks details on rate limits, authentication needs, error handling, or data freshness. It adequately covers the core behavior but misses operational constraints.

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

Conciseness5/5

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

The description is efficiently structured: the first sentence states the purpose, the second clarifies the return, and the subsequent lines provide essential UV index classifications. Every sentence adds value without redundancy, making it easy to scan and understand.

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 the tool's simplicity (0 parameters, no annotations, no output schema), the description is nearly complete. It covers purpose, geographic and temporal scope, and output format with detailed UV levels. Minor gaps include lack of information on data sources or update frequency, but overall it provides sufficient context for effective use.

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?

The input schema has 0 parameters with 100% coverage, so no parameter documentation is needed. The description appropriately focuses on output semantics by explaining the UV index scale and levels, which adds value beyond the schema. This compensates for the lack of an output 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 clearly states the tool's purpose with specific verb ('Get') and resource ('UV index forecast'), including the geographic scope ('for Portugal') and time horizon ('até 3 dias'). It distinguishes from siblings by focusing exclusively on UV radiation forecasting, unlike other tools that handle weather types, sea conditions, fire risk, or seismic data.

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

Usage Guidelines3/5

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

The description implies usage context through the geographic restriction ('for Portugal') and time frame ('até 3 dias'), suggesting this tool is for UV forecasting in Portugal up to 3 days ahead. However, it does not explicitly state when to use this versus alternatives like 'get_forecast' or 'get_daily_aggregate_forecast', nor does it provide exclusions or prerequisites.

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

get_weather_type_descriptionsA

Get descriptions for all weather type codes used in forecasts.

Returns a mapping of weather type IDs to their Portuguese and English descriptions.
This helps interpret the idWeatherType field in forecast data.
ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior3/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. It describes the return format ('mapping of weather type IDs to their Portuguese and English descriptions') and purpose ('helps interpret the idWeatherType field'), but doesn't mention potential limitations like data freshness, rate limits, authentication requirements, or error conditions. It adequately covers the basic read operation but lacks operational details.

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

Conciseness5/5

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

The description is perfectly concise with three focused sentences that each add distinct value: stating the core function, describing the output format, and explaining the practical application. There's no redundancy or wasted words, and the information is front-loaded with the most important details first.

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 the tool's simplicity (no parameters, no output schema, no annotations), the description provides sufficient context for a read-only metadata lookup tool. It explains what the tool returns and why it's useful. The main gap is the lack of output schema, but the description compensates by describing the return format. For a simple tool like this, the description is nearly complete.

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?

The tool has zero parameters with 100% schema description coverage, so the baseline is 4. The description appropriately doesn't discuss parameters since none exist, and instead focuses on the tool's purpose and output format, which is the correct approach for a parameterless tool.

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 clearly states the tool's purpose with specific verbs ('Get descriptions') and resources ('weather type codes used in forecasts'), and distinguishes it from siblings by focusing on metadata interpretation rather than forecast data retrieval. It explicitly mentions the target field ('idWeatherType') and output format ('mapping of weather type IDs to Portuguese and English descriptions').

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 context for when to use this tool ('helps interpret the idWeatherType field in forecast data'), which implicitly distinguishes it from sibling tools that retrieve actual forecast data. However, it doesn't explicitly state when NOT to use it or name specific alternatives for similar functions.

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

get_weather_warningsA

Get Portuguese meteorological warnings for up to 3 days.

Returns current active weather warnings (Avisos Meteorológicos) including:
- Warning type (precipitation, wind, fog, maritime agitation, etc.)
- Awareness level (green, yellow, orange, red)
- Affected area
- Start and end times
ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior3/5

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

With no annotations provided, the description carries full disclosure burden. It usefully describes the return content structure (warning types, awareness levels, affected areas, time ranges) but doesn't mention potential limitations like data freshness, API rate limits, or error conditions that would help an agent use it appropriately.

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

Conciseness5/5

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

The description is efficiently structured with a clear purpose statement followed by bullet points detailing return values. Every sentence earns its place, with no redundant information or unnecessary elaboration.

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 zero-parameter tool with no output schema, the description provides excellent coverage of what the tool returns. It could be more complete by mentioning data source or update frequency, but it adequately explains the core functionality and output structure.

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?

With 0 parameters and 100% schema coverage, the baseline is 4. The description appropriately doesn't discuss parameters since none exist, focusing instead on what the tool returns when invoked without inputs.

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 clearly states the specific action ('Get Portuguese meteorological warnings') with precise scope ('for up to 3 days'), distinguishing it from siblings like get_forecast or get_fire_risk by focusing on active warnings rather than forecasts or other data types.

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

Usage Guidelines3/5

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

The description implies usage context through the 'active weather warnings' focus and 3-day limit, suggesting this tool is for current alert situations rather than general forecasting. However, it doesn't explicitly state when to choose this over alternatives like get_forecast or list_available_cities.

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

list_available_citiesA

List all available Portuguese cities and islands for weather forecasts.

Returns a comprehensive list of all locations available in the IPMA database,
including district capitals and islands (Madeira and Azores).
ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.9/5.0
Behavior2/5

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

With no annotations provided, the description carries full burden for behavioral disclosure. It mentions the data source ('IPMA database') and scope ('comprehensive list'), but doesn't address important behavioral aspects like whether this is a static list or dynamically updated, potential rate limits, authentication requirements, or what format the list returns (e.g., structured data vs. raw text).

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

Conciseness5/5

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

The description is efficiently structured in two sentences: the first states the purpose and scope, the second clarifies what's included in the return. Every word adds value with no redundancy or unnecessary elaboration.

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?

For a simple list-retrieval tool with no parameters and no output schema, the description provides adequate purpose and scope information. However, without annotations or output schema, it lacks details about return format, data freshness, or error conditions that would be helpful for an agent to use it effectively.

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?

The tool has zero parameters, and the schema description coverage is 100% (though trivial since there are no parameters). The description appropriately doesn't discuss parameters, focusing instead on what the tool returns. This meets the baseline expectation for a parameterless tool.

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 clearly states the specific action ('List all available Portuguese cities and islands') and resource ('weather forecasts'), distinguishing it from siblings that retrieve actual weather data rather than location metadata. It explicitly mentions the scope ('IPMA database') and types of locations included ('district capitals and islands').

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 implies usage context by stating this tool provides 'available locations for weather forecasts,' suggesting it should be used to identify valid inputs for forecast-related siblings. However, it doesn't explicitly state when NOT to use it or name specific alternatives among the siblings for different purposes.

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. 10 tool updatesv1.0.0
    • Changedget_daily_aggregate_forecast1 field changed
      • addedInput schema / title
        Added value: +"get_daily_aggregate_forecastArguments"
    • Changedget_fire_risk1 field changed
      • addedInput schema / title
        Added value: +"get_fire_riskArguments"
    • Changedget_forecast1 field changed
      • addedInput schema / title
        Added value: +"get_forecastArguments"
    • Changedget_sea_forecast1 field changed
      • addedInput schema / title
        Added value: +"get_sea_forecastArguments"
    • Changedget_seismic_data1 field changed
      • addedInput schema / title
        Added value: +"get_seismic_dataArguments"
    • Changedget_station_observations1 field changed
      • addedInput schema / title
        Added value: +"get_station_observationsArguments"
    • Changedget_uv_forecast1 field changed
      • addedInput schema / title
        Added value: +"get_uv_forecastArguments"
    • Changedget_weather_type_descriptions1 field changed
      • addedInput schema / title
        Added value: +"get_weather_type_descriptionsArguments"
    • Changedget_weather_warnings1 field changed
      • addedInput schema / title
        Added value: +"get_weather_warningsArguments"
    • Changedlist_available_cities1 field changed
      • addedInput schema / title
        Added value: +"list_available_citiesArguments"
  2. 10 tool updates
    • First observedget_daily_aggregate_forecast
    • First observedget_fire_risk
    • First observedget_forecast
    • First observedget_sea_forecast
    • First observedget_seismic_data
    • First observedget_station_observations
    • First observedget_uv_forecast
    • First observedget_weather_type_descriptions
    • First observedget_weather_warnings
    • First observedlist_available_cities

TDQS

A4.2/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose with no overlap. The tools cover different weather-related data types (daily forecasts, fire risk, sea state, UV index, seismic data, station observations, warnings, city lists, and weather type descriptions), and their descriptions make it easy to distinguish which tool to use for each specific query.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern starting with 'get_' or 'list_', with clear and descriptive nouns (e.g., get_daily_aggregate_forecast, get_fire_risk, list_available_cities). There are no deviations in naming conventions, making the set predictable and easy to navigate.

Tool Count5/5

With 10 tools, the server is well-scoped for providing comprehensive weather data for Portugal. Each tool serves a unique and necessary function, from forecasts and observations to warnings and metadata, without feeling bloated or insufficient for the domain.

Completeness5/5

The tool set provides complete coverage for weather data in Portugal, including forecasts (daily, city-specific, sea, UV), real-time data (observations, seismic activity, warnings), and supporting information (city lists, weather type descriptions). There are no obvious gaps, and agents can access all relevant meteorological aspects without dead ends.

Maintenance

ActivityInactive
ResponsivenessSyncing

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

  • F
    license
    A
    quality
    D
    maintenance
    Provides access to Portuguese weather data from IPMA (Instituto Português do Mar e da Atmosfera), including weather forecasts, meteorological warnings, seismic data, UV index, and real-time observations from weather stations across Portugal.
    6
    -
  • A
    license
    A
    quality
    C
    maintenance
    Provides live Greek weather data from EMY, including forecasts, alerts, marine bulletins, warnings, and climate records. Supports location-based queries by name, ID, or coordinates without requiring an API key.
    6
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Provides weather, UV, sea state, and earthquake data from IPMA Portugal through an MCP gateway, enabling natural language queries for Portuguese meteorological and seismic information.
    6
    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/gabriel20vieira/ipma-mcp-server'

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