Skip to main content

Agent-friendly access to public Hungarian water-management datasets

Project description

ovf-data-mcp

PyPI Python 3.11+ License: MIT MCP Status: Alpha

Agent-friendly, read-only access to public Hungarian water-management data from the Országos Vízügyi Főigazgatóság (OVF).

[!WARNING] This repository is an experimental proof of concept, not a finished or supported production service. Interfaces and upstream integrations may change. See TODO.md for known limitations.

vizugy supports the investigation workflow agents actually need:

discover → resolve stations → inspect coverage → explain query → retrieve or aggregate → cite

The same application logic is exposed through a composable CLI and a local MCP server. The CLI is the primary interface; MCP tools are thin adapters over identical operations.

What it can do

  • Discover and inspect public OVF ArcGIS datasets.
  • Search surface-water stations by name, municipality, or watercourse.
  • Find the nearest stations to WGS84 coordinates.
  • List authoritative measurement codes, units, accepted ranges, and data types.
  • Inspect temporal coverage before requesting observations.
  • Retrieve compact, bounded operational or historical time series.
  • Aggregate observations upstream by day, ten-day period, month, or year.
  • Explain resolved identifiers and query semantics without fetching values.
  • Return structured provenance and explicit upstream caveats.

It deliberately does not interpret hydrology, detect anomalies, expose arbitrary SQL, or provide unrestricted bulk access. The agent remains responsible for analysis.

Data sources

Source Purpose Status
VRAQuery OpenAPI Stations, measurement catalogues, coverage, observations, aggregation Officially documented
OVF ArcGIS REST Spatial dataset discovery and layer metadata Public; metadata quality varies
data.vizugy.hu Official public-data frontend and anonymous access flow Public frontend

Operational observations may be preliminary or unchecked. For official proceedings or guaranteed checked data, follow OVF's formal data-request process.

Installation

Install uv, then choose the CLI or an MCP client.

CLI

Install both vizugy and ovf-data-mcp as isolated global tools:

uv tool install ovf-data-mcp
vizugy --help

Run the CLI without installing it:

uvx --from ovf-data-mcp vizugy --help

MCP clients

Claude Code:

claude mcp add --scope user ovf-data -- uvx ovf-data-mcp

Codex CLI and IDE extension:

codex mcp add ovf-data -- uvx ovf-data-mcp

One-click editor installation:

Client Install
VS Code Install on VS Code
Cursor Install MCP Server

Generic stdio configuration for Cursor and other MCP clients:

{
  "mcpServers": {
    "ovf-data": {
      "command": "uvx",
      "args": ["ovf-data-mcp"]
    }
  }
}
Manual VS Code configuration

Add this to your user configuration or .vscode/mcp.json:

{
  "servers": {
    "ovf-data": {
      "type": "stdio",
      "command": "uvx",
      "args": ["ovf-data-mcp"]
    }
  }
}
Manual Codex configuration

Add this to ~/.codex/config.toml:

[mcp_servers.ovf-data]
command = "uvx"
args = ["ovf-data-mcp"]

Quick investigation

1. Resolve a station

vizugy stations search Budapest --watercourse Duna --limit 10

Results use stable namespaced IDs such as surface:1026.

Find stations by coordinates:

vizugy stations nearest 47.4979 19.0402 --limit 5

2. Inspect available measurements and coverage

vizugy catalog measurements

vizugy observations coverage surface:1026 \
  --metric water-level \
  --data-type operational

Useful metric aliases:

  • water-level
  • discharge
  • water-temperature

Useful data-type aliases:

  • raw
  • observed
  • checked
  • processed
  • hydrological
  • operational

Numeric VRA codes and exact catalogue names are also accepted.

3. Explain before fetching

vizugy observations get surface:1026 \
  --metric water-level \
  --data-type operational \
  --start 2026-07-16T00:00:00Z \
  --end 2026-07-17T00:00:00Z \
  --explain

The explanation shows the resolved station, metric and data-type codes, UTC bounds, upstream operation, expected mode, and safety warnings. It performs no value query.

4. Retrieve a bounded raw series

vizugy observations get surface:1026 \
  --metric water-level \
  --data-type operational \
  --start 2026-07-16T00:00:00Z \
  --end 2026-07-17T00:00:00Z \
  --limit 1000 \
  --format jsonl

Raw observation queries require explicit bounds and may span at most seven days. JSONL emits one compact timestamp/value record per line followed by a _meta record.

5. Aggregate longer periods upstream

vizugy observations aggregate surface:2046 \
  --metric water-level \
  --data-type operational \
  --start 2026-06-01T00:00:00Z \
  --end 2026-07-01T00:00:00Z \
  --interval daily \
  --operation max

Intervals: daily, tenday, monthly, yearly.

Operations supported by VRAQuery: min, max, avg, sum, cnt, mean, cntday.

Aggregation buckets follow upstream hydrological/local-day boundaries. Returned bucket labels remain UTC timestamps and can precede the requested UTC boundary by an offset.

Dataset discovery

Search the OVF ArcGIS catalogue without knowing folder or layer identifiers:

vizugy datasets list --query Vizmercek --limit 20 --format json

Inspect one service or layer:

vizugy datasets describe \
  VIR/Vizmercek_vizugyhu_orszagos_adatsoros \
  --layer 6

Some advertised ArcGIS folders require authentication. Public discovery skips them and returns explicit warnings rather than failing the entire catalogue request.

CLI reference

vizugy datasets list
vizugy datasets describe
vizugy catalog measurements
vizugy stations search
vizugy stations nearest
vizugy observations coverage
vizugy observations get
vizugy observations aggregate

Machine-readable output goes to stdout; diagnostics go to stderr.

Exit code Meaning
0 Success
2 Invalid or unsafe query
3 Upstream unavailable or invalid response
4 Requested entity not found

MCP server

MCP clients launch the local stdio server automatically using the configurations above. To start it directly:

uvx ovf-data-mcp

Available tools:

Tool Intent
discover_datasets Search public spatial datasets
describe_dataset Inspect a service or layer schema
list_measurement_types Resolve metrics, units, ranges, and data types
find_stations Resolve station names, rivers, and municipalities
nearest_stations Resolve coordinates to nearby stations
inspect_coverage Check temporal availability before querying
get_observations Retrieve a bounded raw series
aggregate_observations Aggregate a longer series upstream

Output semantics

Observation results distinguish:

  • station identity and location;
  • observation or aggregation-bucket timestamp;
  • metric and unit;
  • VRA data type;
  • requested UTC interval;
  • retrieval timestamp;
  • provider and source operation;
  • truncation and upstream warnings.

The coverage endpoint currently omits composed operational type 101. When related type 100 coverage exists, vizugy returns it with an explicit inference warning; it does not silently claim equivalence.

Configuration

Variable Default Purpose
VIZUGY_ARCGIS_URL https://geoportal.vizugy.hu/arcgis/rest ArcGIS catalogue root
VIZUGY_VRA_URL https://vmservice.vizugy.hu/vraquery VRAQuery API root
VIZUGY_TOKEN_URL https://data.vizugy.hu/AuthApi/auth/token Public frontend token endpoint
VIZUGY_TIMEOUT_SECONDS 15 Upstream request timeout
VIZUGY_CACHE_TTL_SECONDS 300 ArcGIS metadata cache lifetime

Development

git clone https://github.com/kalcifield/ovf-data-mcp.git
cd ovf-data-mcp
uv sync --extra test
uv run ruff format --check src tests
uv run ruff check src tests
uv run ty check src tests
uv run pytest -q

Design decisions, verified upstream behavior, and unresolved questions are documented in docs/design.md and docs/phase-2-review.md.

Licence and data attribution

The software is available under the MIT License. This does not establish unrestricted reuse rights for every upstream dataset. Preserve OVF provenance and verify the applicable data terms before redistribution or production use.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ovf_data_mcp-0.1.2.tar.gz (75.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ovf_data_mcp-0.1.2-py3-none-any.whl (18.3 kB view details)

Uploaded Python 3

File details

Details for the file ovf_data_mcp-0.1.2.tar.gz.

File metadata

  • Download URL: ovf_data_mcp-0.1.2.tar.gz
  • Upload date:
  • Size: 75.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for ovf_data_mcp-0.1.2.tar.gz
Algorithm Hash digest
SHA256 45a6849e5a6284849b114b1da7846a614b42516e3dba5db09ca0ac8f0726dc5d
MD5 dfa9cf6334fccfc6b4eb0b66825a7e44
BLAKE2b-256 83e9e6266ff9c40eebf8108ad0d87e5f970fc35ee1f8565bce39f38c5fe20076

See more details on using hashes here.

Provenance

The following attestation bundles were made for ovf_data_mcp-0.1.2.tar.gz:

Publisher: release.yml on kalcifield/ovf-data-mcp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file ovf_data_mcp-0.1.2-py3-none-any.whl.

File metadata

  • Download URL: ovf_data_mcp-0.1.2-py3-none-any.whl
  • Upload date:
  • Size: 18.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for ovf_data_mcp-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 0ba428cfe77c2fe2d9e10ae4d338a100f132d30f05a7fa2afe0fa7d87be3fef7
MD5 25767e28cecf93ad6c402ae94415b6e4
BLAKE2b-256 2b328951d59efdf787e82c0670b3bee5c3e3ef569f851ffb6a72863898db5f50

See more details on using hashes here.

Provenance

The following attestation bundles were made for ovf_data_mcp-0.1.2-py3-none-any.whl:

Publisher: release.yml on kalcifield/ovf-data-mcp

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page