InfraNode.dev

Open data MCP server for German cities

The InfraNode MCP server is a free, hosted Model Context Protocol server that gives AI agents access to 78 data types of open data for 84 major German cities through 12 lean tools, with no API key. It exposes the city data as tools an agent calls directly, so you do not write HTTP calls by hand. The server is listed in the official MCP Registry under the name dev.infranode/infranode, with a tool overview and score also on Glama.

In short: InfraNode is the open data MCP server for Germany, a free, keyless MCP server for German cities and their open data, usable in Claude, ChatGPT and other AI agents.

What sets it apart: InfraNode is the most comprehensive open data MCP server for Germany. It is not limited to a single city or to rail only, but covers all 84 major German cities and every data type, from environment and mobility to energy, economy and city life, through one hosted, keyless endpoint, with no per-city signup and no local install. How InfraNode compares to other MCP servers for German and European data is shown in the MCP server comparison.

City names are lenient, you don't need the exact slug

City names are resolved leniently. Write the German name with or without umlauts, casing does not matter, and common English exonyms and short forms work too: München, münchen, munich and munchen all resolve to muenchen, cologne to koeln, frankfurt to frankfurt-am-main. If a name is not recognized you get a 404 whose hint suggests the closest slug (“Meintest du …?"). The list_cities tool returns the canonical slugs at any time.

Data tools by topic

Dedicated pages per data type explain the matching MCP tool and how to use it in your AI assistant:

This data is available for all 84 covered cities. New to MCP? What is an MCP server covers the basics, the setup guide shows how to connect it in Claude and ChatGPT.

Connect now

The server is publicly hosted at https://mcp.infranode.dev/mcp (Streamable HTTP). No install, no API key: add it as a connector with that URL in Claude, ChatGPT or any other MCP client and you are done.

Building a Custom GPT instead of an MCP setup? For the OpenAI ecosystem InfraNode is also available as a GPT action with a curated OpenAPI.

Try it now: have it build a live dashboard

In clients with canvas/artifact support (e.g. Claude Code, Claude.ai), a simple prompt is enough to turn InfraNode data into a finished, interactive page. For example:

Build me a live dashboard for Cologne

The agent calls get_city_overview plus a few targeted live data types (weather, air quality, train departures, traffic events via get_city_resource) and renders a full overview page from that on its own, InfraNode itself never prescribes any UI:

Cologne dashboard generated by Claude from InfraNode live data: weather, air quality, train departures, traffic events and data coverage

The result isn't an InfraNode app, it's something the agent built itself from the tools' raw JSON responses, starting from get_city_overview. Works the same way for any of the other 83 cities.

What the server runs against

The MCP server is a thin wrapper around the InfraNode live API. Each tool calls the REST API and passes its normalised JSON through unchanged. There is no mapping logic in the server and no API key for read access.

The 12 tools

The server provides 12 lean tools that together cover 78 data types. This keeps the token footprint in the agent's context window minimal, stays well below the tool limits of common MCP clients (e.g. 80 tools in Cursor), and the data breadth keeps growing without adding new tools.

Why 12 tools instead of 71? (July 2026 change): Until June 2026 every data type carried its own tool, 71 in total. That tool list cost roughly 30,000 tokens in the context window of every connected agent, on every single connect, and would have kept growing with each new data type. Since July 2026 get_city_resource bundles the entire long tail: same data, same responses, but only about 4,400 tokens for the whole tool list (85 percent less) and permanent headroom under all client tool limits. For existing users: if you previously called an individual tool such as charging or parking, call get_city_resource(slug, resource="charging") instead; the key is the former tool name in kebab case (for example water_level becomes water-level). The REST API is unaffected by this change.

Tool Description
get_city(slug) City master data (population, area, coordinates)
get_city_overview(slug) One-call overview: catalog of all 78 data types with key and coverage status + live highlights (discovery entry point)
get_city_resource(slug, resource) Generic access to all 78 data types by data type key (see list below)
air_quality(slug) Official air quality: PM10, PM2.5, NO2, O3, SO2 (UBA)
weather(slug) Current weather observations (DWD, not a forecast)
pois(slug, type) Points of interest, filtered by type (OpenStreetMap)
station_board_departures(eva) Live departures of any station by EVA number, all categories incl. local trains + disruptions (DB Timetables)
station_board_arrivals(eva) Live arrivals of any station by EVA number, all categories incl. local trains + disruptions (DB Timetables)
transit_departures(slug, stop_id?) Live public-transport departures with delays (GTFS-RT/HVV/VGN; Berlin prefers VBB CC-BY 4.0)
list_cities() List of all covered cities (slugs, coverage)
sources() All data sources with licence and availability
compare(resource, cities) Compare one resource (weather, air, indicators, demographics, unemployment, tourism, charging-status, weather-warnings) across several cities

Most tools expect a city slug (for example berlin or hamburg); pois also requires a type parameter (e.g. hospital, school, pharmacy), and transit_departures optionally takes a stop_id. list_cities and sources need no argument.

The 78 data types

Any data type without a dedicated tool is fetched via get_city_resource, passing the data type key as the resource argument. Example: get_city_resource(slug="berlin", resource="charging") returns the charging stations in Berlin. Which keys a city covers is shown by get_city_overview(slug) (key plus coverage status per data type); the infranode://catalog resource lists all data types.

Core and geo

Data type Description
base City master data. Dedicated tool: get_city
overview One-call overview: catalog of all data types per city with coverage status + live highlights (discovery entry point). Dedicated tool: get_city_overview
geo Geo data
demographics Demographics
population-density Population density from the official Census 2022 100m grid (inhabitants per km² over the populated area)

Environment and weather

Data type Description
air-uba Official air quality. Dedicated tool: air_quality
air Air quality, live readings
weather Weather. Dedicated tool: weather
weather-warnings Official DWD weather warnings (severe weather, level)
civil-protection-warnings Official civil protection warnings (BBK NINA: hazmat, major fire, etc.)
pollen-uv Pollen and UV index
fire-danger Forest and grassland fire danger index (DWD)

Mobility and traffic

Data type Description
traffic Traffic situation
transit Public transit stops
charging Charging stations
charging-status EV charging occupancy (live, all 84 cities)
road-events Road and construction notices
parking Live parking occupancy per city: vacant spaces and occupancy (Dortmund, Frankfurt am Main, Wuppertal)
vehicle-registrations Car stock and electric vehicle share (KBA)
accidents Road traffic accidents per county (accident atlas)
crime-stats Crime statistics per main offence group: cases, frequency per 100k, clearance rate (BKA PKS)
fuel-prices Fuel prices per city, aggregated (Tankerkönig)
sharing Bike and scooter sharing per city, aggregated (GBFS)
bike-counts Bike counters per city: municipal continuous cycling-count stations (municipal open data, partial coverage)
station-departures Live departures at each city's main station with delays (DB Timetables)
station-arrivals Live arrivals at each city's main station with delays (DB Timetables)
stations Catalog of all stations in a city with EVA numbers (DB StaDa)
station-facilities Station facilities: lift and escalator status (DB FaSta, partial coverage)

Water and situation

Data type Description
water-level Water levels
flood Flood situation
bathing-water Bathing water quality nearby (EEA)

Health and energy

Data type Description
health Health data
icu-live ICU beds, live
hospitals-atlas Hospital locations from the federal clinic atlas
energy Energy installations (market master data register)
power-load Electricity consumption / grid load per control zone (SMARD)
power-price Day-ahead wholesale power price (SMARD)
solar Solar irradiation and normalised PV yield per kWp (PVGIS)
solar-roofs Rooftop solar cadastre per city: solar potential of roofs (partial coverage)
district-heating District heating networks (municipal heat planning, partial coverage)

Economy and statistics

Data type Description
unemployment Unemployment count and rate per county
tourism Guest overnight stays and arrivals (tourism)
construction Building permits (residential buildings and dwellings)
indicators Socioeconomic indicators per county (INKAR/BBSR, ~70 metrics)
sustainability Sustainability and SDG indicators per municipality as a time series from 2006 to 2023 (Wegweiser Kommune, Bertelsmann Stiftung, CC0)
population-structure Age structure per city as a time series: count and share per age group, by gender and generation, actuals from 2006 and forecast to 2040 (Wegweiser Kommune, CC0)
population-trend Population trend as a time series: change in age groups, birth and death rates, migration balance (Wegweiser Kommune, CC0)
municipal-finance Municipal finances as a time series: tax multipliers, tax capacity, debt, investment, social spending (Wegweiser Kommune, CC0)
labour-market Labour market and commuters as a time series: unemployment and employment rates, in- and out-commuters (Wegweiser Kommune, CC0)
integration Integration as a time series: population shares, employment, education, naturalisations (Wegweiser Kommune, CC0)
childcare Childcare as a time series: care rates by age, type of care and hours, 83 cities (Wegweiser Kommune, CC0)
education-stats Education statistics as a time series: school qualifications, apprentices, further education, 70 cities (Wegweiser Kommune, CC0)
social-situation Social situation as a time series: SGB II rates, old-age poverty, basic income support, over-indebtedness (Wegweiser Kommune, CC0)
care Long-term care as a time series: people in need of care, care rate, outpatient and inpatient, forecast to 2030, 73 cities (Wegweiser, CC0)
land-values Official land values per city, aggregated (BORIS, building land)
tax-rates Local tax multipliers per municipality: trade tax and property tax A/B/C (Regionalstatistik)
business-registrations Business registrations/deregistrations and net per district (Regionalstatistik)
insolvencies Insolvency filings per district: corporate and other debtors (incl. consumers), annual (Regionalstatistik)
public-tenders Public procurement per city: running tenders and awarded contracts (German public procurement data service, OCDS/CC0)

City life and politics

Data type Description
pois Points of interest (required type parameter, e.g. hospital). Dedicated tool: pois
events Events
webcams Webcams
election Election results
holidays Public holidays
heritage Listed heritage monuments per city from the state register (Berlin, DL-DE/Zero)
office-wait-times Government office wait times per city: live wait at citizen/vehicle-registration offices (Cologne only, partial coverage)
council-papers Council information per city: council papers, motions and resolutions from the council information systems (OParl; Dresden, Cologne, Düsseldorf, Münster, Leipzig)

City infrastructure (OpenStreetMap)

Data type Description
playgrounds Public playgrounds
drinking-water Public drinking water fountains
public-toilets Public toilets
markets Markets and marketplaces (optional market days)
parcel-lockers Parcel lockers (DHL, Amazon, DPD, Hermes, GLS)
post-offices Post offices
post-boxes Public post boxes with collection times
public-wifi Public Wi-Fi locations
recycling-centres Recycling centres
government-offices Government offices (citizen and administrative offices)
education Education facilities (schools, universities, kindergartens)
tree-cadastre Municipal tree cadastre (species, planting year, height; Berlin, DL-DE/Zero)

Example call

An agent fetches the one-call overview for Berlin: base data, a catalog of all 78 data types with key and coverage status, and a live-highlights snapshot. A good entry point for any city question, instead of guessing a single data type. The result is the live API's normalised JSON, passed through unchanged.

get_city_overview(slug="berlin")

One-click install

For Cursor and VS Code it is one click. Because InfraNode is keyless, there is no login, the server connects instantly:

Add to Cursor Add to VS Code

Connect (remote, recommended)

The fastest path: add the hosted endpoint https://mcp.infranode.dev/mcp as a connector. In Claude Code a single command does it (first tab). Clients with URL connector configuration (Claude Desktop, ChatGPT and others) use the JSON form in the second tab or enter the URL directly in their connector UI.

claude mcp add --transport http infranode https://mcp.infranode.dev/mcp

Once added, the 12 InfraNode tools are available in the agent. Access is read-only and key-free.

Connect stdio-only clients (npx mcp-remote)

Some MCP clients only support local stdio servers, not a remote URL. For them the standard mcp-remote tool bridges the gap: it runs locally via npx and pipes stdio to the hosted endpoint. No repo, no key, no InfraNode install required.

{
  "mcpServers": {
    "infranode": {
      "command": "npx",
      "args": ["-y", "mcp-remote", "https://mcp.infranode.dev/mcp"]
    }
  }
}

If your client supports remote URL connectors (Claude, ChatGPT), the direct route above is simpler. mcp-remote is only the fallback for purely local stdio clients. Note: there is deliberately no package via pip, uvx or npx infranode, the hosted endpoint is the intended path.

Run it locally (optional)

If you prefer to self-host, run the server locally over stdio (third tab). The source code is available on GitHub (Apache-2.0). The INFRANODE_MCP_API_BASE environment variable sets the API base it talks to (default https://infranode.dev/api/v1).

What is MCP

The Model Context Protocol (MCP) is an open standard through which AI agents plug in external tools and data sources. An MCP server registers its tools with the client, the agent calls them with typed arguments when needed and receives structured JSON back. For you as a developer that means: instead of building an API integration, you connect a server once and your agent can use the data right away. The InfraNode server is reachable remotely over Streamable HTTP and needs no local process; alternatively it runs locally over stdio.