Statistik Austria MCP Server
An MCP server that gives AI assistants access to Statistik Austria's open data portal
Table of Contents
About The Project
A Model Context Protocol server for the free Open Government Data portal of Statistik Austria (data.statistik.gv.at). It lets an AI assistant such as Claude search the catalog, read a dataset's structure and fetch its data directly, instead of you downloading and pasting CSV files.
The portal publishes each dataset as a set of files with coded values, so a raw table is hard for a model to read correctly. The server joins the classification files onto the data, so every value arrives as a readable German label together with its original code, and marks the rows that are totals of other rows.
Built as a personal learning project to practise building MCP servers.
Features:
- Keyword search over the full OGD catalog (around 540 datasets)
- Dataset metadata: dimensions and measures
- Data with codes resolved to German labels, formatted
label <code> - Total rows are flagged, so the assistant doesn't add a total to its own parts
- Filters by dimension value, so large tables don't have to be read in full
- Paging that never drops rows silently: every response says how many rows exist and where to continue
- Clear messages for datasets in formats the server can't read, instead of a bare error
- Downloads are cached for an hour, so paging through a dataset doesn't download it again
Built With
- Python 3
- MCP Python SDK
- pandas
- httpx2
- cachetools
- uv
Getting Started
The server runs locally on your computer and talks to your MCP client over stdio. uvx installs and starts it, so there is nothing to clone for normal use.
Prerequisites
- uv (it downloads a matching Python version automatically)
- Git
- Claude Desktop or Claude Code (or any other MCP client)
Installation
Claude Desktop
- Open the config file. In Claude Desktop, go to Settings → Developer → Edit Config, or open it directly:
- Windows:
%APPDATA%\Claude\claude_desktop_config.json - macOS:
~/Library/Application Support/Claude/claude_desktop_config.json
- Windows:
- Add the server
{ "mcpServers": { "statistik-austria": { "command": "uvx", "args": ["--from", "git+https://github.com/DV155/Statistik-Austria-MCP-Server", "statistik-austria-mcp"] } } }
- Quit Claude Desktop completely and start it again.
Claude Code
claude mcp add --transport stdio --scope user statistik-austria -- uvx --from git+https://github.com/DV155/Statistik-Austria-MCP-Server statistik-austria-mcp
The first start takes a while, because uv installs the dependencies (pandas is the largest). To get that out of the way, run the uvx command above once in a terminal and stop it with Ctrl+C once it is running. If Claude can't find uvx, replace "uvx" with its full path (which uvx shows it). Claude Desktop writes the server's logs to %APPDATA%\Claude\logs on Windows and ~/Library/Logs/Claude on macOS.
Local development
- Clone the repo
git clone https://github.com/DV155/Statistik-Austria-MCP-Server.git cd Statistik-Austria-MCP-Server
- Install the dependencies
uv sync - Start the server in the MCP Inspector
uv run mcp dev src/statserver/server.py
Usage
Ask Claude a question about Austrian statistics, and it uses the tools on its own.
| Tool | What it does |
|---|---|
search_dataset |
Searches the catalog by keyword and returns matching dataset IDs and titles |
fetch_dataset_json |
Returns a dataset's dimensions and measures with their codes |
fetch_dataset_csv |
Returns the data with labels, total-row flags and paging; filters keeps only the rows for given dimension values |
The server also provides an ogd://catalog resource with the catalog's categories.
Tip: the catalog's titles are German, so the server searches in German. Claude translates the question itself, but asking in German works just as well.
Limitations
Tested against all 543 datasets in the catalog in October 2026:
- 474 load fully
- 66 are published in formats the server can't read (zip archives and map services such as WFS and WMS); the server says so instead of failing
- 2 contain no data rows
- 1 (
OGDEXT_BINNENWAND_1) loads without labels and slowly
Other limitations:
- Only the free OGD portal is supported, not the paid STATcube API
- The catalog is read from the portal's HTML page, so search stops working if Statistik Austria changes that page's structure
- The first request for a very large dataset can take several seconds while it downloads
Data Source
All data comes from Statistik Austria - data.statistik.gv.at, licensed under CC BY 4.0. When you publish results obtained through this server, credit Statistik Austria as the source.
This is an independent project and is not affiliated with or endorsed by Statistik Austria.
Contributing
Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.
If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag "enhancement". Don't forget to give the project a star! Thanks again!
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature) - Commit your Changes (
git commit -m 'Add some AmazingFeature') - Push to the Branch (
git push origin feature/AmazingFeature) - Open a Pull Request
Top contributors:
License
Distributed under the MIT license. See LICENSE for more information.
Contact
Daniil Vasilcovschii - LinkedIn - GitHub
Project Link: https://github.com/DV155/Statistik-Austria-MCP-Server
Metadata
Release files for statistik-austria-mcp 1.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| statistik_austria_mcp-1.1.0.tar.gz | 10.2 kB | Without provenance | Details for statistik_austria_mcp-1.1.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| statistik_austria_mcp-1.1.0-py3-none-any.whl | Python 3 | none | any | Details for statistik_austria_mcp-1.1.0-py3-none-any.whl |
Total release size: 21.6 kB
Release files / statistik_austria_mcp-1.1.0.tar.gz
| Download URL | statistik_austria_mcp-1.1.0.tar.gz |
|---|---|
| Size | 10.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
80c8e74c02623de83b33d8a9675bea784f3eaad7ba4e250029122ef4b1cfa02a
|
|
BLAKE2b-256 checksum How to use checksums |
542489d46e6cd02e4a70907dc2a720d609fa3fa256afaff56f2cc6aec378d229
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.6 {"installer":{"name":"uv","version":"0.12.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Release files / statistik_austria_mcp-1.1.0-py3-none-any.whl
| Download URL | statistik_austria_mcp-1.1.0-py3-none-any.whl |
|---|---|
| Size | 11.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
f543e40a468722e4cf69e80b6aedbe97284cc6459b2d15e7d4141dd574496dfc
|
|
BLAKE2b-256 checksum How to use checksums |
b38dde76e616cd1e9aff4000e9dc3a9578e59cd784ad6311c8bf16d0595a3a46
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
uv/0.12.6 {"installer":{"name":"uv","version":"0.12.6","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":null,"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
|
Security for statistik-austria-mcp 1.1.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.