Skip to main content
Glama
LittleAndi

smhi-mcp-server

SMHI MCP Server

smhi-mcp-server MCP server

CI

MCP server for Swedish Meteorological and Hydrological Institute (SMHI) weather data, built on SMHI's current snow1g point-forecast API.

SMHI retired its older pmp3g forecast API on 2026-03-31 in favor of snow1g. This project is a fresh implementation against the current API.

Features

  • get_forecast - Full ~10-day forecast with all parameters

  • get_current_weather - Current conditions (temperature, wind, precipitation)

  • get_hourly_forecast - Next 1-48 hours hourly

  • get_daily_summary - Daily high/low for up to 10 days

  • get_fire_risk - Wildfire/forest fire risk forecast (Canadian FWI system)

  • get_radar_image - Latest observed precipitation radar composite for Sweden

  • get_weather_warnings - Active official SMHI weather warnings/alerts (wind, rain, snow, thunder, flooding, fire risk, etc.)

  • get_weather_analysis - Past ~24h gridded meteorological analysis ("what's actually happening"), not a forecast

Related MCP server: mcp-norwegian-weather

Coverage

Sweden, Norway, Finland, Denmark, Estonia, and parts of Latvia/Lithuania. get_radar_image and get_weather_warnings are Sweden-only.

Installation

Claude Code

Add to your Claude Code settings (~/.claude/settings.json):

{
  "mcpServers": {
    "smhi": {
      "command": "node",
      "args": ["/path/to/smhi-mcp-server/dist/index.js"]
    }
  }
}

Build from source

npm install
npm run build

Usage Examples

Get current weather in Stockholm

Tool: get_current_weather
Input: { "latitude": 59.3293, "longitude": 18.0686 }

Get weekly forecast for Gothenburg

Tool: get_daily_summary
Input: { "latitude": 57.7089, "longitude": 11.9746, "days": 7 }

Check if it will rain in Oslo

Tool: get_hourly_forecast
Input: { "latitude": 59.9139, "longitude": 10.7522, "hours": 12 }

Check wildfire risk near Norrköping

Tool: get_fire_risk
Input: { "latitude": 58.5877, "longitude": 16.1924, "period": "daily" }

See what's actually raining right now

Tool: get_radar_image
Input: {}

Check for active storm warnings in Stockholm county

Tool: get_weather_warnings
Input: { "county": "Stockholm", "minSeverity": "YELLOW" }

See what's actually happened in Malmö over the last few hours

Tool: get_weather_analysis
Input: { "latitude": 55.6050, "longitude": 13.0038, "hours": 6 }

API Reference

get_forecast

Get complete ~10-day forecast with all SMHI parameters.

Parameter

Type

Required

Description

latitude

number

Yes

-90 to 90

longitude

number

Yes

-180 to 180

get_current_weather

Get current weather conditions.

Parameter

Type

Required

Description

latitude

number

Yes

-90 to 90

longitude

number

Yes

-180 to 180

Returns: temperature (°C), humidity (%), wind (m/s), pressure (hPa), visibility (km), cloud cover (%), precipitation (mm), weather description.

get_hourly_forecast

Get hourly forecast.

Parameter

Type

Required

Default

Description

latitude

number

Yes

-

-90 to 90

longitude

number

Yes

-

-180 to 180

hours

number

No

24

1-48

get_daily_summary

Get daily weather summary.

Parameter

Type

Required

Default

Description

latitude

number

Yes

-

-90 to 90

longitude

number

Yes

-

-180 to 180

days

number

No

7

1-10

Returns: date, high/low temperature (°C), dominant weather, precipitation sum (mm), max wind speed (m/s).

get_fire_risk

Get wildfire/forest fire risk forecast, based on the Canadian Fire Weather Index (FWI) system as run by SMHI (fwif1g API). Calibrated for Swedish forest and grass fuels.

Parameter

Type

Required

Default

Description

latitude

number

Yes

-

-90 to 90

longitude

number

Yes

-

-180 to 180

period

string

No

daily

daily (~6 days ahead, afternoon fire risk) or hourly (next 48 hours)

Returns per time step: fire risk class (1-6) and description, the underlying FWI/ISI/BUI/FFMC/DMC/DC indices (unitless), grass fire risk class, forest dryness class (daily only), temperature (°C)/wind (m/s)/humidity (%), and multi-day precipitation sums (mm).

get_radar_image

Get the latest Swedish precipitation radar composite (mosaic of all Swedish radar stations, SMHI's radar comp product), updated roughly every 5 minutes. Unlike the forecast tools above, this reflects observed precipitation happening right now rather than a prediction.

No input parameters.

Returns the radar image (PNG) plus area, product, and validTime/updated timestamps. Coverage: Sweden only.

get_weather_warnings

Get currently active official SMHI weather warnings (impact-based warnings, ibwwarnings/IBWwarnings API). Not coordinate-based — returns all active warnings for Sweden, each tagged with the county/area it affects; filter client-side by severity and/or county.

Parameter

Type

Required

Default

Description

language

string

No

en

en or sv

minSeverity

string

No

-

RED, ORANGE, YELLOW, or MESSAGE — only return warnings at or above this severity

county

string

No

-

Case-insensitive substring match against the warning's area name and affected counties, e.g. "Stockholm"

Returns count plus a flat warnings array (one entry per warning area) with event, severity/severityCode, areaName, affectedCounties, descriptions (title/text pairs), approximateStart, and published. Coverage: Sweden only.

get_weather_analysis

Get the past ~24 hours of gridded meteorological analysis (SMHI's mesan2g/Mesan2gv3 API): a "best current estimate" of conditions, blending observations with a short-range model on a ~2.5 km grid, not a forecast. Useful for nowcasting at a point without a nearby observation station, checking how a past forecast turned out, or "what was the weather really like" lookups.

Parameter

Type

Required

Default

Description

latitude

number

Yes

-

-90 to 90

longitude

number

Yes

-

-180 to 180

hours

number

No

24

1-24, most recent hours to return

Returns hourly entries (most recent first): temperature (°C, plus min/max at some hours), dew point, wet-bulb temperature (°C), humidity (%), wind speed/direction/gust (m/s), pressure (hPa, sea-level and station), visibility (km), cloud cover (total/low/medium/high, %) and base/top altitude (m), precipitation over the last 1/3/12/24h (mm — the 3/12/24h windows are only populated at some hours), snow depth change over the last hour (cm), and a weather symbol/description.

Development

npm install
npm run typecheck
npm test
npm run build

Data Source

Data provided by SMHI Open Data under CC BY 4.0.

License

MIT

Available Tools

8 tools
get_current_weatherA
Read-onlyIdempotent

Get current weather conditions (the nearest forecast time step) for a location: temperature, wind, humidity, precipitation, and a human-readable weather description. Use this for a quick "what's the weather like right now" snapshot; use get_hourly_forecast for future hours, get_daily_summary or get_forecast for a multi-day outlook. Temperature in °C, wind speed in m/s, pressure in hPa, precipitation in mm, humidity/cloud cover/probabilities in %. Returns an error result (isError: true) if coordinates are out of range or the SMHI API is unreachable. Coverage: Sweden, Norway, Finland, Denmark, Estonia, and parts of Latvia/Lithuania.

ParametersJSON Schema
NameRequiredDescriptionDefault
latitudeYesLatitude of the location (-90 to 90)
longitudeYesLongitude of the location (-180 to 180)

TDQS

A4.9/5.0
Behavior5/5

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

Beyond the annotations (readOnly, openWorld, idempotent, non-destructive), the description adds critical behavioral details: it returns an error result (isError: true) for out-of-range coordinates or API unreachability, and clarifies that it returns the nearest forecast time step, not actual real-time measurements. It also specifies units for all returned values. No contradictions with annotations.

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 three sentences: definition, usage guidance, and units/error/coverage. It is front-loaded with the purpose, and every sentence adds distinct information without repetition or filler. The structure is efficient and well-organized.

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 the simple tool (2 params, no output schema), the description is comprehensive: it lists returned variables, provides usage context, explains units, alleges error behavior, and states geographic coverage. The annotations further cover safety and idempotency. There is no missing critical information for an agent to select and invoke this tool correctly.

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 already provides 100% coverage for both parameters with ranges. The description adds value by explaining that out-of-range coordinates will produce an error, which clarifies the enforcement of the schema bounds. It also implies the parameters are coordinates within the covered region, though it doesn't detail formatting beyond 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: 'Get current weather conditions' and enumerates the data fields (temperature, wind, humidity, precipitation, description). It explicitly distinguishes this tool from siblings by noting it returns the nearest forecast time step, versus hourly or daily tools. This clearly differentiates it from get_hourly_forecast, get_daily_summary, and get_forecast.

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

Usage Guidelines5/5

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

The description provides direct usage guidance: 'Use this for a quick "what's the weather like right now" snapshot' and explicitly names alternatives for other time horizons. It also mentions geographical coverage, setting expectations for where the tool works. This is explicit and actionable.

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

get_daily_summaryA
Read-onlyIdempotent

Get a daily weather summary for the next 1-10 days (default 7): high/low temperature, dominant weather condition, precipitation total, and max wind speed per day. Use this for a multi-day outlook at a glance; use get_hourly_forecast or get_forecast when you need hour-level detail instead. Temperature in °C, wind speed in m/s, precipitation in mm. Returns an error result (isError: true) if coordinates are out of range or the SMHI API is unreachable. Coverage: Sweden, Norway, Finland, Denmark, Estonia, and parts of Latvia/Lithuania.

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNoNumber of days to summarize (1-10, default 7)
latitudeYesLatitude of the location (-90 to 90)
longitudeYesLongitude of the location (-180 to 180)

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already declare readOnlyHint and idempotentHint, and the description adds valuable behavioral context: error result (isError) for out-of-range coordinates or API unreachability, geographic coverage, and unit conventions. No contradiction with annotations; the description enriches what the annotations already communicate.

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 compact (four sentences) and front-loaded with the core purpose. Every sentence adds value: content list, usage guidance, units, error handling, and coverage. No redundant or filler text.

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 tool with no output schema, the description fully covers the output shape (high/low, condition, precipitation, wind), units, error behavior, and geographical scope. It also integrates guidance on when to use alternatives, making it self-contained for the agent.

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

Parameters3/5

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

Schema description coverage is 100%, so the baseline is 3. The description adds minimal parameter semantics beyond the schema, only reiterating the days range and default. It does not clarify latitude/longitude beyond what the schema provides, nor does it add format details for coordinates.

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 begins with a specific verb ('Get') and a clear resource ('daily weather summary') with a precise scope (next 1-10 days, default 7). It enumerates the content (high/low temp, dominant condition, precipitation total, max wind speed), distinguishing it from forecast siblings by emphasizing the daily aggregation and at-a-glance nature.

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

Usage Guidelines5/5

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

Explicitly states when to use this tool ('multi-day outlook at a glance') and names the alternatives to use when hour-level detail is needed (get_hourly_forecast or get_forecast). This gives the agent clear decision criteria and prevents misuse.

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

get_fire_riskA
Read-onlyIdempotent

Get a wildfire/forest fire risk forecast for a location, based on the Canadian Fire Weather Index (FWI) system as run by SMHI and calibrated for Swedish forest and grass fuels. Use this instead of the general forecast tools when the question is specifically about fire danger. Returns a fire risk class (1-6) plus the underlying FWI/ISI/BUI/FFMC/DMC/DC indices (unitless index values, not raw weather readings), grass fire risk class, and forest dryness class (daily period only). Also includes temperature (°C), wind speed (m/s), humidity (%), and multi-day precipitation sums (mm). Returns an error result (isError: true) if coordinates are out of range or the SMHI API is unreachable. Coverage: Sweden, Norway, Finland, Denmark, Estonia, and parts of Latvia/Lithuania.

ParametersJSON Schema
NameRequiredDescriptionDefault
periodNoForecast granularity: "daily" for ~6 days ahead (afternoon fire risk), "hourly" for the next 48 hoursdaily
latitudeYesLatitude of the location (-90 to 90)
longitudeYesLongitude of the location (-180 to 180)

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already mark the tool readOnly and idempotent. The description adds transparency by disclosing the error result for out-of-range coordinates or unreachable SMHI API, and by clarifying that the indices are unitless values, not raw weather readings. This goes beyond the safety profile provided by annotations.

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 the minimal but every sentence contributes: purpose, usage, outputs, error handling, and coverage. Its structure is logical and front-loaded with the core purpose.

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?

With no output schema, the description carries the full burden of explaining return values. It enumerates the fire risk class, indices, grass fire risk, dryness class, weather variables, and precipitation sums, plus error behavior and geographical coverage. This is sufficient for an agent to know what to expect.

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 already documents all three parameters with 100% coverage. The description adds one extra semantic: the forest dryness class is only available for the daily period, which is not in the schema's period description. This gives the agent useful parameter-dependent behavior information.

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 retrieves a wildfire/forest fire risk forecast, explicitly naming the Canadian Fire Weather Index system and the specific output types. It distinguishes itself from sibling general forecast tools by directing users to use this when the question is specifically about fire danger.

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

Usage Guidelines5/5

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

The description provides explicit usage guidance: 'Use this instead of the general forecast tools when the question is specifically about fire danger.' It also gives a coverage area and notes error conditions, helping the agent decide when to invoke it.

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

get_forecastA
Read-onlyIdempotent

Get the full ~10-day weather forecast for a location, with every raw SMHI parameter at native time resolution (hourly for the first days, then 3/6-hourly further out) — including fields not exposed by the other forecast tools, such as cloud layers and precipitation min/max/median. Prefer get_current_weather for a single now-reading, get_hourly_forecast for an hour-by-hour view, or get_daily_summary for a multi-day high/low overview; use this tool when you need the complete unprocessed dataset. Temperatures in °C, wind speed in m/s, pressure in hPa, precipitation in mm, humidity/cloud cover/probabilities in %. Returns an error result (isError: true) if coordinates are out of range or the SMHI API is unreachable. Coverage: Sweden, Norway, Finland, Denmark, Estonia, and parts of Latvia/Lithuania.

ParametersJSON Schema
NameRequiredDescriptionDefault
latitudeYesLatitude of the location (-90 to 90)
longitudeYesLongitude of the location (-180 to 180)

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already indicate readOnlyHint, idempotentHint, and non-destructive behavior. The description goes beyond annotations by specifying units, time resolution, geographic coverage, and error behavior (returns isError: true on out-of-range coordinates or API unavailability). No contradiction with annotations.

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 a single dense paragraph that efficiently covers scope, resolution, unique fields, alternatives, units, errors, and coverage. While longer than the ideal two-sentence example, every clause adds necessary context and the structure is logical.

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 complex forecast tool with no output schema, the description provides all essential context: time resolution, unit system, error handling, geographic boundaries, and explicit relationships to sibling tools. It gives the agent enough information to select and invoke the tool correctly.

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 schema already documents both parameters with ranges (100% coverage), so the description adds limited but valuable semantics: the valid geographic coverage area (Sweden, Norway, etc.) and unit conventions. This supplements the schema without redundancy.

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 returns the full ~10-day weather forecast with every raw SMHI parameter at native resolution. It explicitly distinguishes itself from sibling tools by noting it includes fields not exposed by the others, making the purpose unambiguous.

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

Usage Guidelines5/5

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

The description explicitly tells the agent when to use alternatives: 'Prefer get_current_weather for a single now-reading, get_hourly_forecast for an hour-by-hour view, or get_daily_summary for a multi-day high/low overview' and then states 'use this tool when you need the complete unprocessed dataset.' This provides clear when-to-use and when-not-to-use guidance.

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

get_hourly_forecastA
Read-onlyIdempotent

Get an hour-by-hour weather forecast for the next 1-48 hours (default 24): temperature, wind, precipitation, and conditions per hour. Use this to answer questions like "will it rain in the next few hours"; use get_current_weather for a single now-reading, get_daily_summary for a multi-day high/low overview, or get_forecast for the complete raw dataset. Temperature in °C, wind speed in m/s, precipitation in mm, probabilities in %. Returns an error result (isError: true) if coordinates are out of range or the SMHI API is unreachable. Coverage: Sweden, Norway, Finland, Denmark, Estonia, and parts of Latvia/Lithuania.

ParametersJSON Schema
NameRequiredDescriptionDefault
hoursNoNumber of hours to forecast (1-48, default 24)
latitudeYesLatitude of the location (-90 to 90)
longitudeYesLongitude of the location (-180 to 180)

TDQS

A4.7/5.0
Behavior5/5

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

Annotations already indicate read-only, idempotent, non-destructive behavior. The description adds meaningful operational context: return units, default behavior, error result on out-of-range coordinates or API unavailability, and regional coverage. No contradiction with annotations.

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?

Four sentences, front-loaded with the core purpose, then usage guidance, units, error behavior, and coverage. Every sentence provides distinct value and there is no fluff or redundancy.

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?

Despite no output schema, the description clearly explains return content, units, default range, error behavior, and geographic coverage. This is sufficient for an agent to select and invoke the tool correctly and interpret results appropriately.

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

Parameters3/5

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

Input schema already fully documents all three parameters with ranges and defaults (100% coverage). The description reinforces the hours default and coordinate range constraints but does not add significant new parameter-level semantics beyond what the schema provides.

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 ('Get') and resource ('hour-by-hour weather forecast'), with clear scope (1-48 hours, default 24) and content (temperature, wind, precipitation, conditions). Explicitly distinguishes itself from siblings by naming get_current_weather, get_daily_summary, and get_forecast.

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

Usage Guidelines5/5

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

Gives a concrete use case ('will it rain in the next few hours') and explicitly lists when to use alternative tools (get_current_weather for a single now-reading, get_daily_summary for multi-day overview, get_forecast for complete raw dataset). Also provides coverage and error conditions.

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

get_radar_imageA
Read-onlyIdempotent

Get the latest Swedish precipitation radar composite (mosaic of all Swedish radar stations), updated roughly every 5 minutes. Unlike the forecast tools, this shows observed precipitation happening right now, not a prediction — use the forecast tools instead if the question is about future weather. Takes no parameters. Returns a PNG image plus its area, product name, and validTime/updated timestamps. Returns an error result (isError: true) if the SMHI radar API is unreachable. Coverage: Sweden only.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.9/5.0
Behavior5/5

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

Beyond the annotations (readOnly, openWorld, idempotent), the description adds critical behavioral details: update frequency ('updated roughly every 5 minutes'), return payload (PNG, area, product name, timestamps), and error behavior ('isError: true if the SMHI radar API is unreachable'). No contradiction with annotations.

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?

Three sentences cover purpose, distinction from siblings, usage caveat, return value, error behavior, and coverage. Every sentence adds new information; no filler or redundancy.

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?

Despite having no output schema, the description explains the return format and error conditions. With annotations covering safety/idempotency, the description covers the remaining essentials: update cadence, scope, and sibling differentiation. This is fully sufficient for a parameterless read-only tool.

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, so there is nothing to explain beyond what schema shows. The description explicitly notes 'Takes no parameters', which reinforces the schema. Baseline for 0 params is 4, and the description is consistent.

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 begins with a specific verb+resource: 'Get the latest Swedish precipitation radar composite', which clearly identifies the tool's function. It distinguishes from siblings by explicitly stating 'Unlike the forecast tools, this shows observed precipitation happening right now, not a prediction.'

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

Usage Guidelines5/5

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

The description provides explicit usage context: it says to use forecast tools for future weather and this tool for current observations. It also notes coverage is Sweden only, which is key for relevance. This gives the agent clear criteria for deciding between this tool and alternatives.

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

get_weather_analysisA
Read-onlyIdempotent

Get the past ~24 hours of gridded meteorological analysis for a location, from SMHI's Mesan2gv3 API — a "best current estimate" of conditions (observations blended with a short-range model on a ~2.5 km grid), not a forecast. Use this for nowcasting ("what's actually happening right now" at a point without a nearby observation station), verifying how a past forecast turned out, or "what was the weather really like" lookups; use the forecast tools instead for future conditions. Returns hourly entries (most recent first) with temperature (°C, plus min/max at some hours), dew point, wet-bulb temperature, wind (m/s), pressure (hPa, sea-level and station), visibility (km), cloud cover layers and base/top altitude (%, m), precipitation over the last 1/3/12/24h (mm, later windows only populated at some hours), snow depth change (cm), and a human-readable weather description. Returns an error result (isError: true) if coordinates are out of range or the SMHI API is unreachable. Coverage: Sweden, Norway, Finland, Denmark, Estonia, and parts of Latvia/Lithuania.

ParametersJSON Schema
NameRequiredDescriptionDefault
hoursNoNumber of most recent hours to return (1-24, default 24)
latitudeYesLatitude of the location (-90 to 90)
longitudeYesLongitude of the location (-180 to 180)

TDQS

A4.9/5.0
Behavior5/5

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

Beyond the readOnlyHint, the description reveals response ordering (hourly, most recent first), specific fields with units, error behavior when coordinates are out of range or API is unreachable, and regional coverage. It also notes data availability nuances such as 'later windows only populated at some hours'.

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?

Despite being lengthy, each sentence serves a distinct purpose: definition, use cases, return data, error handling, and coverage. The description is well-structured and front-loaded with the core action, containing no redundant or wasted text.

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?

With no output schema, the description thoroughly enumerates all returned data fields and units, explains the data source and nature, provides usage context, and describes failure modes. It gives a complete picture of the tool's behavior without requiring external documentation.

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 coverage is 100%, so the baseline is 3. The description adds value by clarifying that coordinates must be within the indicated geographical coverage and that out-of-range values trigger an error. It also connects the 'past ~24 hours' phrasing to the hours parameter, supplementing the schema's 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 tool retrieves past ~24 hours of gridded meteorological analysis from SMHI's Mesan2gv3 API, explicitly noting it is 'not a forecast'. It differentiates from sibling tools by recommending forecast tools for future conditions, making the purpose unambiguous.

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

Usage Guidelines5/5

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

The description explicitly lists when to use this tool: for nowcasting, verifying past forecasts, and historical lookups. It also states to use forecast tools instead for future conditions, providing clear alternatives and excluding misuse.

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

get_weather_warningsA
Read-onlyIdempotent

Get currently active official SMHI weather warnings/alerts for Sweden (impact-based warnings for wind, rain, snow, thunder, high temperatures, flooding, fire risk, and more). Not coordinate-based — returns all active warnings, each tagged with the county/area it affects, so filter by county name and/or minimum severity to narrow results. Severity levels from most to least severe: RED > ORANGE > YELLOW > MESSAGE. Use this for "is there a storm warning" type questions; use the forecast tools for general future conditions and get_fire_risk for the underlying fire danger index. Returns an error result (isError: true) if the SMHI warnings API is unreachable. Coverage: Sweden only.

ParametersJSON Schema
NameRequiredDescriptionDefault
countyNoOnly return warnings affecting this county or area (case-insensitive substring match against the warning's area name and affected counties), e.g. "Stockholm" or "Gotland"
languageNoLanguage for warning text: "en" (English) or "sv" (Swedish)en
minSeverityNoOnly return warnings at or above this severity (RED > ORANGE > YELLOW > MESSAGE). Omit to return all active warnings.

TDQS

A4.7/5.0
Behavior5/5

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

The description adds meaningful behavioral context beyond the annotations: it returns all active warnings tagged by county/area, supports filtering by county and severity, defines the severity ordering (RED > ORANGE > YELLOW > MESSAGE), and discloses the error behavior (returns isError: true if the API is unreachable). This is rich context for a read-only tool with already-safe annotations.

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 five sentences long, but every sentence earns its place: main purpose, non-coordinate/filtering model, severity ordering, explicit sibling guidance, error behavior, and geographic coverage. It is front-loaded with the primary action and resource, making it easy to scan, with no filler or redundant statements.

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?

Despite having no output schema, the description provides sufficient information for correct invocation and interpretation: it explains that results are active warnings tagged by area, how to narrow them, severity levels, error cases, and coverage. Given the tool's moderate complexity and strong annotations, this is complete enough for an agent to select and call the tool appropriately.

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

Parameters3/5

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

The schema provides 100% coverage with detailed descriptions for all three parameters, including the case-insensitive substring match for county, the language enum, and the severity threshold ordering. The description restates some of this (e.g., 'filter by county name and/or minimum severity') but does not add meaning beyond the schema. Thus the baseline of 3 is appropriate.

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: 'Get currently active official SMHI weather warnings/alerts for Sweden.' It further distinguishes itself from siblings by stating it is 'not coordinate-based' and lists the types of impact-based warnings covered. This makes the tool's purpose unambiguous and clearly differentiated from the forecast and fire-risk tools.

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

Usage Guidelines5/5

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

Explicit usage guidance is provided: 'Use this for "is there a storm warning" type questions; use the forecast tools for general future conditions and get_fire_risk for the underlying fire danger index.' It also clarifies the tool is limited to Sweden, which helps agents avoid misuse. This goes beyond implied usage to explicitly state when to use and when to use alternatives.

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. 8 tool updatesv1.2.0
    • Changedget_current_weather1 field changed
      • addedInput schema / $schema
        Added value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedget_daily_summary1 field changed
      • addedInput schema / $schema
        Added value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedget_fire_risk1 field changed
      • addedInput schema / $schema
        Added value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedget_forecast1 field changed
      • addedInput schema / $schema
        Added value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedget_hourly_forecast1 field changed
      • addedInput schema / $schema
        Added value: +"https://json-schema.org/draft/2020-12/schema"
    • Changedget_radar_image1 field changed
      • addedInput schema / $schema
        Added value: +"https://json-schema.org/draft/2020-12/schema"
    • Addedget_weather_analysis
    • Changedget_weather_warnings2 fields changed
      • addedInput schema / $schema
        Added value: +"https://json-schema.org/draft/2020-12/schema"
      • changedInput schema / properties / county / description
        Previous value: -"Only return warnings affecting this county or area (case-insensitive substring match), e.g. \"Stockholm\" or \"Gotland\""New value: +"Only return warnings affecting this county or area (case-insensitive substring match against the warning's area name and affected counties), e.g. \"Stockholm\" or \"Gotland\""
  2. 3 tool updatesv1.1.0
    • Addedget_fire_risk
    • Addedget_radar_image
    • Addedget_weather_warnings
  3. 4 tool updatesv1.0.0
    • First observedget_current_weather
    • First observedget_daily_summary
    • First observedget_forecast
    • First observedget_hourly_forecast

TDQS

A4.8/5.0
Disambiguation5/5

Each tool targets a distinctly different weather data need: current conditions, hourly forecast, daily summary, full raw forecast, radar imagery, warnings, fire risk, and past analysis. Descriptions explicitly cross-reference when to use each, eliminating ambiguity.

Naming Consistency5/5

All tool names follow a consistent get_verb_noun pattern (e.g., get_forecast, get_radar_image, get_weather_warnings). The naming is uniform and predictable, making it easy to infer tool functionality.

Tool Count5/5

Eight tools provide comprehensive coverage of weather data without being excessive. Each tool serves a clear purpose, and the count is well-scoped for a weather server offering forecasts, current conditions, radar, warnings, fire risk, and analysis.

Completeness5/5

The tool set covers the full weather data lifecycle: current conditions, hourly/daily/raw forecasts, radar observations, warnings, fire danger, and historical analysis. There are no obvious dead ends or missing core operations for the stated domain.

Maintenance

ActivityMaintained
ResponsivenessSyncing

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    An MCP server that aggregates data from six weather sources to provide current conditions, forecasts, air quality, and aviation METAR information, specifically optimized for European and Nordic locations. It supports multi-source data merging and functions without API keys for several integrated providers.
    22
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    An MCP server that provides current weather conditions and hourly forecasts for locations across Norway using the MET Norway Locationforecast 2.0 API. It features coordinate support, geocoding for any Norwegian location, and built-in configurations for major cities.
    2
    16
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    MCP server that provides real-time weather data, forecasts, and historical weather information from SMHI (Swedish Meteorological and Hydrological Institute) for any location in Sweden.
    2
    -

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/LittleAndi/smhi-mcp-server'

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