Skip to main content
Glama
evarness-ai

iris-weather-mcp

by evarness-ai

iris-weather-mcp

The weather plugin's forecast tool as a standalone MCP server process, run through the harness's signed MCP bridge, with no import of iris_harness in the plugin process. This is the experiment of iris-harness#82: comparison data for the trust-ladder / isolation question, not a production proposal. The server itself is standalone; the comparison tests are built against iris_harness's stable tier where possible and record in docs/GAPS.md (GAP-M1) the places where they had to import non-stable modules (the MCP bridge and its signing package), because the stable tier offers no MCP surface.

  • src/iris_weather_mcp/: the server (official mcp SDK, stdio). Dependencies: mcp, httpx.

  • tests/: the comparison suite. It runs in a SECOND venv that holds the harness wheel and spawns the server with the first venv's interpreter. Fault fixtures are stdlib-only servers in tests/servers/; the upstream is a loopback stub.

  • docs/COMPARISON.md: in-process vs MCP, per graduation property, with evidence.

  • docs/GAPS.md: what the bridge and SDK could not do, as precise findings.

  • scripts/ci_local.sh: the local gate (two fresh venvs, lint, isolation proof, tests).

The in-process plugin (../iris-weather-plugin) is the control arm and is not modified.

Running the tests

iris-harness is not on a package index yet (iris-harness#108). scripts/ci_local.sh is the gate: it builds two throwaway venvs (the server's, with no harness; the test host's, with an iris-harness wheel built from the clone given by IRIS_HARNESS_CLONE, default ../iris-harness, or a prebuilt wheel in IRIS_WHEEL_DIR), lints, scans the server source, and runs the suite. The control arm (tests/test_compare.py) imports a sibling checkout of iris-weather-plugin at ../iris-weather-plugin; it is skipped, loudly, when that is absent. There is no hosted CI for this repository.

Related MCP server: weather-mcp

License and contributing

Apache-2.0, the same license as iris-harness (see LICENSE). Contributions follow CONTRIBUTING.md.

Available Tools

2 tools
weather_code_meaningA

Explain a WMO weather code in words. Args: {"code": int}.

ParametersJSON Schema
NameRequiredDescriptionDefault
codeYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.5/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden. 'Explain' implies a read-only lookup with no side effects, but it does not address invalid code handling or other behavioral details. The output schema covers return values, reducing the need to describe them.

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 concise and front-loaded with the core purpose. The trailing 'Args: {"code": int}' partially duplicates the schema and could be omitted, but overall it is efficient.

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 simple one-parameter utility with an output schema, the description is largely complete. It could add valid WMO code ranges or handling for invalid codes, but the essential purpose and argument meaning are present.

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 0%, so the description must compensate. It identifies the parameter as a WMO weather code, which adds meaningful domain context beyond the schema's bare 'integer' type, but it does not provide valid ranges or examples.

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 states a specific verb ('Explain') and resource ('WMO weather code'), making the tool's purpose clear. It does not explicitly differentiate itself from the sibling weather_forecast, though the resource distinction is evident.

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?

Usage is implied: use this when a WMO weather code needs to be translated into words. There is no explicit guidance on when to use it versus weather_forecast, nor any exclusions or prerequisites.

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

weather_forecastB

Get the daily weather forecast for a place from Open-Meteo. Args: location (str), days (int 1-16, default 3).

ParametersJSON Schema
NameRequiredDescriptionDefault
daysNo
locationYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

B3.3/5.0
Behavior3/5

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

With no annotations, the description carries the behavioral burden. It discloses the data source, daily granularity, and the days range/default, but omits permissions, rate limits, units, timezone handling, and read-only behavior. For a simple read-only tool with an output schema, this is adequate but incomplete.

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?

Two compact sentences with the purpose front-loaded and parameters listed second. There is no filler, and every sentence earns its place.

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

Completeness3/5

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

The tool is simple and an output schema exists, so return values need not be explained. However, the critical location format is unspecified, and with no annotations and 0% schema coverage, the description leaves gaps that could lead to incorrect invocation.

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 0%, so the description must compensate. It adds the useful 1-16 range for days and confirms parameter types, but it does not explain the expected format for location or any units/format details for the forecast.

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

Purpose4/5

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

States a specific verb ('Get') and resource ('daily weather forecast') plus the source Open-Meteo. It is clear what the tool does, but it does not distinguish itself from the sibling weather_code_meaning tool.

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

Usage Guidelines2/5

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

Provides no explicit guidance on when to use this tool versus weather_code_meaning or any alternative. Usage is only implied by the verb 'Get' and the resource name.

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.

  1. 2 tool updatesv0.1.0
    • First observedweather_code_meaning
    • First observedweather_forecast

TDQS

A3.5/5.0

Scored across 2 tools

Disambiguation5/5

The two tools have clearly distinct purposes: one decodes a WMO weather code, while the other retrieves a daily forecast. There is no overlap or ambiguity in what each tool does.

Naming Consistency4/5

Both names use consistent snake_case with a shared `weather_` prefix, which makes them predictable. The pattern is noun-based rather than verb_noun (e.g., `weather_code_meaning` is a bit noun-heavy), so it is slightly less action-oriented than ideal, but still consistent.

Tool Count3/5

Two tools is on the thin side for a weather server; it covers forecast and code interpretation but lacks surface area for common weather queries. The count is borderline rather than clearly appropriate or excessive.

Completeness3/5

The surface covers daily forecasting and WMO code explanation, but missing current conditions, hourly data, historical weather, or alerts means common weather requests cannot be fulfilled. These are notable gaps for an agent expecting a general-purpose weather service.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Provides weather forecasts and active alerts for US locations using the National Weather Service API. It supports both local stdio and remote HTTP/SSE transport modes for flexible integration with MCP clients.
    55 npm
    GPL 3.0
  • A
    license
    Not graded
    quality
    B
    maintenance
    Exposes weather data from the free Open-Meteo API via decorator-driven MCP tools with Zod schemas, supporting stdio and HTTP transports.
    13 npm
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    An MCP server providing worldwide weather via the free Open-Meteo APIs (no API key needed). Runs fully self-contained in Docker as a streamable-HTTP MCP service.
    -