# de.fluvigil/pegel

> German and Swiss river gauges, groundwater and flood levels from ten official sources

- name: de.fluvigil/pegel
- version: 1.0.0
- connection class: R1 (autonomous)
- trust: 80/100 flags: no-repository
- quality: 79/100 (good)
- owner: not claimed
- descriptor: https://api.protogrid.dev/v1/servers/de.fluvigil%2Fpegel
- tools: https://api.protogrid.dev/v1/servers/de.fluvigil%2Fpegel/tools

**An agent can connect on its own if it already holds `X_API_KEY`, `X_API_KEY`.** Remote endpoint behind a static API key or header. The registry never sees the value; the agent fills the placeholder.

## Connection (mcpServers)

```json
{
  "mcpServers": {
    "pegel": {
      "type": "http",
      "url": "https://fluvigil.de/mcp",
      "headers": {
        "X-Api-Key": "${X_API_KEY}",
        "Authorization": "${X_API_KEY}"
      }
    }
  }
}
```

Placeholders to fill: `${X_API_KEY}`, `${X_API_KEY}`.

## Trust

- hygiene: 80
- liveness: 100
- freshness: 85
- provenance: 55
- drivers: +dns-namespace +website +reachable +uptime-100% ~updated-40d-ago -no-repository
- Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed.

## Quality 79/100 (good)

### protocol: 88 (weight 25)

- pass `protocol.modern`: supports 2026-07-28 (server/discover)
- pass `protocol.stateless`: answers without a session
- pass `protocol.transport`: streamable HTTP
- warn `protocol.list_ttl`: tools/list declares ttlMs 0, so clients re-fetch it on every use

### authorization: n/a (weight 15)

- n/a `auth.prm`, `auth.as_metadata`, `auth.cimd`: no remote uses OAuth
- n/a `auth.secret_in_url`: no templated URL

### tool hygiene: 100 (weight 30)

- pass `tools.descriptions`: every tool has a description
- pass `tools.description_length`: descriptions are concise
- pass `tools.schemas`: every tool has an object input schema
- pass `tools.annotations`: 6 of 6 tools declare readOnlyHint or destructiveHint
- pass `tools.directory_hints`: every tool declares readOnlyHint, destructiveHint, idempotentHint and openWorldHint
- pass `tools.token_cost`: about 1,378 tokens to load every tool
- pass `tools.api_dump`: tools are not a one-to-one API dump

### stability: 25 (weight 15)

- warn `stability.changes`: 10 tool changes in 30 days
- fail `stability.rug_pull`: 2 tools kept their name but changed most of their description in 30 days; review before trusting them

### dependencies: n/a (weight 15)

- n/a `deps.known_vulns`, `deps.mcp_sdk_version`, `deps.resolvable`: no npm or PyPI package

- tools: 6, about 1,378 tokens to load them all
- tool set hash: 9c5490ce312510671482173c29460733
- tools last changed: 2026-10-13T15:12:55.386Z
- badge: [![protogrid quality](https://protogrid.dev/badge/de.fluvigil/pegel.svg)](https://protogrid.dev/servers/de.fluvigil/pegel)
- Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed.

### Tool changes

- 2026-10-13 `get_station` changed (outputSchema)
- 2026-10-13 `search_stations` changed (inputSchema, outputSchema)
- 2026-10-13 `get_forecast` changed (description, outputSchema)
  - before: Newest published water-level forecast for a station: the median of the state agency model run, future points within the horizon. Only gauges whose state publishes numeric forecasts have one, so an empty result is normal. Indicative, not an official warning.
  - after: Newest published water-level forecast for a station: the median of the state agency model run, future points within the horizon. Only gauges whose state publishes numeric forecasts have one, so an empty result is normal. Indicative, not an official warning. Every result names the data provider in sourceNotice (search and flood situation: sourceNotices, keyed by sourceNoticeId); show that notice with any value, class or forecast you pass on, and the licence terms of the API require it.
- 2026-10-13 `get_readings` changed (description, outputSchema)
  - before: Time series for a station (downsampled to ≤200 points; history depth on this tier: last 90 days, default last 7 days). type "level" (default) → level series as stored valueCentimeters: centimetres above gauge zero for most gauges, but an elevation ×100 for groundwater wells and for gauges reporting an absolute elevation (Swiss gauges, the Neusiedler See) — divide by valueDivisor to read it in unit. type "discharge" → discharge Q in m³/s where the station provides it.
  - after: Time series for a station (downsampled to ≤200 points; history depth on this tier: last 90 days, default last 7 days). type "level" (default) → level series as stored valueCentimeters: centimetres above gauge zero for most gauges, but an elevation ×100 for groundwater wells and for gauges reporting an absolute elevation (Swiss gauges, the Neusiedler See) — divide by valueDivisor to read it in unit. type "discharge" → discharge Q in m³/s where the station provides it. Every result names the data provider in sourceNotice (search and flood situation: sourceNotices, keyed by sourceNoticeId); show that notice with any value, class or forecast you pass on, and the licence terms of the API require it.
- 2026-10-13 `get_station` changed (description, outputSchema) **meaning changed**
  - before: Master data of one station: measurement type, current value with its unit, thresholds (MNW/MHW, alert marks, as stored valueCentimeters), flood class, coordinates.
  - after: Master data of one station: measurement type, current value with its unit, thresholds (MNW/MHW, alert marks, as stored valueCentimeters), flood class, coordinates. Every result names the data provider in sourceNotice (search and flood situation: sourceNotices, keyed by sourceNoticeId); show that notice with any value, class or forecast you pass on, and the licence terms of the API require it.
- 2026-10-13 `get_flood_situation` changed (description, outputSchema) **meaning changed**
  - before: Current flood situation: stations with an active LHP flood class (1 small … 4 very large), optionally per federal state.
  - after: Current flood situation: stations with an active LHP flood class (1 small … 4 very large), optionally per federal state. Every result names the data provider in sourceNotice (search and flood situation: sourceNotices, keyed by sourceNoticeId); show that notice with any value, class or forecast you pass on, and the licence terms of the API require it.
- 2026-10-13 `search_stations` changed (description, outputSchema)
  - before: Search stations in Germany and its neighbouring countries — river gauges, groundwater wells, reservoirs, coastal gauges — by name or water body, optionally filtered by region (a German federal state or a country code). latestValue is given in the station's unit.
  - after: Search stations in Germany and its neighbouring countries — river gauges, groundwater wells, reservoirs, coastal gauges — by name or water body, optionally filtered by region (a German federal state or a country code). latestValue is given in the station's unit. Every result names the data provider in sourceNotice (search and flood situation: sourceNotices, keyed by sourceNoticeId); show that notice with any value, class or forecast you pass on, and the licence terms of the API require it.
- 2026-10-12 `get_readings` changed (outputSchema)
- 2026-10-12 `get_station` changed (outputSchema)
- 2026-10-12 `search_stations` changed (outputSchema)

Full history: https://api.protogrid.dev/v1/servers/de.fluvigil%2Fpegel/changes

## Remotes

- https://fluvigil.de/mcp (streamable-http, auth api_key ${X_API_KEY}, reachable true, uptime30d 1)

## Packages

_none_

## Tools (6)

- `get_flood_situation`: Current flood situation: stations with an active LHP flood class (1 small … 4 very large), optionally per federal state. Every result names the data provider in sourceNotice (search and flood situation: sourceNotices, keyed by sourceNoticeId); show that notice with any value, class or forecast you pass on, and the licence terms of the API require it.
- `get_forecast`: Newest published water-level forecast for a station: the median of the state agency model run, future points within the horizon. Only gauges whose state publishes numeric forecasts have one, so an empty result is normal. Indicative, not an official warning. Every result names the data provider in sourceNotice (search and flood situation: sourceNotices, keyed by sourceNoticeId); show that notice with any value, class or forecast you pass on, and the licence terms of the API require it.
- `get_readings`: Time series for a station (downsampled to ≤200 points; history depth on this tier: last 90 days, default last 7 days). type "level" (default) → level series as stored valueCentimeters: centimetres above gauge zero for most gauges, but an elevation ×100 for groundwater wells and for gauges reporting an absolute elevation (Swiss gauges, the Neusiedler See) — divide by valueDivisor to read it in unit. type "discharge" → discharge Q in m³/s where the station provides it. Every result names the data provider in sourceNotice (search and flood situation: sourceNotices, keyed by sourceNoticeId); show that notice with any value, class or forecast you pass on, and the licence terms of the API require it.
- `get_station`: Master data of one station: measurement type, current value with its unit, thresholds (MNW/MHW, alert marks, as stored valueCentimeters), flood class, coordinates. Every result names the data provider in sourceNotice (search and flood situation: sourceNotices, keyed by sourceNoticeId); show that notice with any value, class or forecast you pass on, and the licence terms of the API require it.
- `get_weather`: Daily weather forecast at the station coordinate (DWD data via Bright Sky).
- `search_stations`: Search stations in Germany and its neighbouring countries — river gauges, groundwater wells, reservoirs, coastal gauges — by name or water body, optionally filtered by region (a German federal state or a country code). latestValue is given in the station's unit. Every result names the data provider in sourceNotice (search and flood situation: sourceNotices, keyed by sourceNoticeId); show that notice with any value, class or forecast you pass on, and the licence terms of the API require it.
