InfraNode
Server Details
Keyless open data for 84 German cities: 12 lean read-only MCP tools covering 67 data types.
- Status
- Healthy
- Last Tested
- Transport
- Streamable HTTP
- URL
- Repository
- street1983nk/infranode
- GitHub Stars
- 11
- Server Listing
- InfraNode
Glama MCP Gateway
Connect through Glama MCP Gateway for full control over tool access and complete visibility into every call.
Full call logging
Every tool call is logged with complete inputs and outputs, so you can debug issues and audit what your agents are doing.
Tool access control
Enable or disable individual tools per connector, so you decide what your agents can and cannot do.
Managed credentials
Glama handles OAuth flows, token storage, and automatic rotation, so credentials never expire on your clients.
Usage analytics
See which tools your agents call, how often, and when, so you can understand usage patterns and catch anomalies.
Tool Definition Quality
Average 4.5/5 across 12 of 12 tools scored. Lowest: 3.8/5.
Each tool serves a distinct purpose: discovery (list_cities, get_city, get_city_overview), specific live data (air_quality, weather, transit, stations), generic accessor (get_city_resource), comparison (compare), and metadata (sources). Even similar tools like station_board_arrivals and departures are clearly separated. No overlapping functionality.
Naming patterns are mixed: some use 'get_' prefix (get_city, get_city_resource), others are bare nouns (weather, pois, sources), and 'compare' is a lone verb. However, the conventions are intelligible and the descriptions clarify each tool's role.
With 12 tools, the server is well-scoped for a read-only city data API. It provides both high-level discovery and specific data access without being too numerous or too sparse. The generic get_city_resource covers 67 data types, keeping the surface manageable.
The tool set covers the full lifecycle for a read-only information server: discovery (list_cities, get_city, get_city_overview), specific queries (air_quality, weather, transit, stations, pois), cross-city comparison, and source metadata. The overview tool ensures no dead ends by directing to get_city_resource for any remaining data type. No obvious gaps.
Available Tools
12 toolsair_qualityAir QualityRead-onlyIdempotentInspect
Get official air quality for a German city (PM10, NO2 and more).
Sourced from the Umweltbundesamt (UBA). Read-only. For live nearest-station
hourly readings use get_city_resource(slug, resource='air') instead.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | City identifier, e.g. 'berlin' or 'hamburg'. Resolved leniently: the German name with or without umlauts, any casing, a common English exonym or short form also works (München/munich/munchen -> muenchen, cologne -> koeln, frankfurt -> frankfurt-am-main). An unknown name returns 404 with a 'Meintest du ...?' suggestion. list_cities gives the canonical slugs. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| meta | Yes |
compareCompare CitiesRead-onlyIdempotentInspect
Compare ONE resource across MULTIPLE cities in a single response.
Fans the resource out over the listed cities and returns a per-city
source_status (ok/disabled/no_data/error/not_found), so a missing or
failing city source does not spoil the whole answer. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| cities | Yes | Comma-separated list of city slugs, e.g. 'berlin,koeln,hamburg' (max. 28 cities). | |
| resource | Yes | Resource to compare. Supported: 'weather' (DWD), 'air' (UBA air quality), 'indicators' (INKAR socioeconomic indicators incl. unemployment rate and EV charging coverage), 'demographics', 'unemployment', 'tourism', 'charging-status' (live EV charging occupancy, aggregates only) and 'weather-warnings' (official DWD warning level per city). |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| meta | Yes |
get_cityCity Base DataRead-onlyIdempotentInspect
Get base data for a German city (population, area, coordinates).
Sourced from Wikidata. Read-only. Useful as a first lookup to confirm a city
exists and get its core attributes. For a broader question about the city
(what data is available at all) use get_city_overview instead.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | City identifier, e.g. 'berlin' or 'hamburg'. Resolved leniently: the German name with or without umlauts, any casing, a common English exonym or short form also works (München/munich/munchen -> muenchen, cologne -> koeln, frankfurt -> frankfurt-am-main). An unknown name returns 404 with a 'Meintest du ...?' suggestion. list_cities gives the canonical slugs. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| meta | Yes |
get_city_overviewCity OverviewRead-onlyIdempotentInspect
Get a ONE-CALL overview of everything InfraNode knows about a German city.
Start here for any city question. Returns: the city's base data, a CATALOG of
all 81 available data types (weather, air quality, public transit, trains,
traffic, charging, parking, solar, energy, demographics, taxes, accidents,
tourism, heritage, trees, population density, playgrounds, post boxes and many
more), each with its coverage status and the exact tool to call next (for most
data types that is get_city_resource(slug, resource=<type>)), plus a small
live highlights snapshot (current weather, air quality and train departures).
Data types not yet covered for this city show where they ARE available so you
can pivot. InfraNode keeps adding data and cities, so the catalog grows over
time. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | City identifier, e.g. 'berlin' or 'hamburg'. Resolved leniently: the German name with or without umlauts, any casing, a common English exonym or short form also works (München/munich/munchen -> muenchen, cologne -> koeln, frankfurt -> frankfurt-am-main). An unknown name returns 404 with a 'Meintest du ...?' suggestion. list_cities gives the canonical slugs. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| meta | Yes |
get_city_resourceCity Data by TypeRead-onlyIdempotentInspect
Fetch ANY per-city data type by its key (generic accessor, 81 data types).
One tool for the whole breadth of InfraNode: live data (air, traffic, transit
stops, parking, charging, water-level, flood, sharing, fuel-prices, icu-live,
webcams, station-departures/-arrivals/stations, ...), statistics
(demographics, unemployment, tourism, accidents, crime-stats, indicators,
land-values, tax-rates, insolvencies, ...), multi-year TIME SERIES
(sustainability: SDG indicators per municipality, one value per year from
2006 to 2023, so trends can be answered without stitching snapshots),
infrastructure and environment
(solar, solar-roofs, district-heating, energy, heritage, tree-cadastre,
playgrounds, public-toilets, markets, education, ...) and more. Discover the
valid keys and per-city coverage with get_city_overview(slug) or the
infranode://catalog resource; the resource enum lists every key.
Uncovered types return source_status="not_covered" (plus where they ARE
available), never an error. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | City identifier, e.g. 'berlin' or 'hamburg'. Resolved leniently: the German name with or without umlauts, any casing, a common English exonym or short form also works (München/munich/munchen -> muenchen, cologne -> koeln, frankfurt -> frankfurt-am-main). An unknown name returns 404 with a 'Meintest du ...?' suggestion. list_cities gives the canonical slugs. | |
| resource | Yes | Data type key to fetch, exactly as listed by get_city_overview / the infranode://catalog resource (the 'type' field), e.g. 'charging', 'parking', 'demographics', 'solar', 'district-heating'. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| meta | Yes |
list_citiesList CitiesRead-onlyIdempotentInspect
List all covered cities (slug, federal state, population, coverage).
Takes no arguments. Call this first to discover valid city slugs before invoking any city-scoped tool. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| meta | Yes |
poisPoints of InterestRead-onlyIdempotentInspect
Get points of interest in a German city, filtered by type.
Sourced from OpenStreetMap. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | City identifier, e.g. 'berlin' or 'hamburg'. Resolved leniently: the German name with or without umlauts, any casing, a common English exonym or short form also works (München/munich/munchen -> muenchen, cologne -> koeln, frankfurt -> frankfurt-am-main). An unknown name returns 404 with a 'Meintest du ...?' suggestion. list_cities gives the canonical slugs. | |
| type | Yes | POI type from the API allowlist, one of: hospital, school, pharmacy, restaurant, police, kindergarten. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| meta | Yes |
sourcesData SourcesRead-onlyIdempotentInspect
List all data sources with license, attribution and availability.
Takes no arguments. Shows which upstream sources InfraNode bundles and whether each is currently active. Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| meta | Yes |
station_board_arrivalsStation Board: ArrivalsRead-onlyIdempotentInspect
Get live arrivals for ANY railway station by its EVA number.
Mirror of station_board_departures for arriving trains (all categories,
real-time delays, disruption messages). Get the EVA from
get_city_resource(slug, resource='stations'). Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| eva | Yes | Station EVA number (digits only) from get_city_resource(slug, resource='stations'), e.g. '8000105' (Frankfurt Hbf). |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| meta | Yes |
station_board_departuresStation Board: DeparturesRead-onlyIdempotentInspect
Get live departures for ANY railway station by its EVA number.
Covers all train categories including local/regional (S/RB/RE) and long
distance, with real-time delays, cancellations and disruption messages. Get
the EVA from get_city_resource(slug, resource='stations'). Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| eva | Yes | Station EVA number (digits only) from get_city_resource(slug, resource='stations'), e.g. '8011160' (Berlin Hbf). |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| meta | Yes |
transit_departuresTransit DeparturesRead-onlyIdempotentInspect
Get live public-transport departures with real-time delays for a stop.
Sourced from GTFS-RT/HVV/VGN. Unlike the static stop list
(get_city_resource(slug, resource='transit')), this returns minute-fresh
departures including delay for ONE stop. A stop_id is required: fetch the
city's transit stops first to discover valid stop IDs, then pass one here.
Read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | City identifier, e.g. 'berlin' or 'hamburg'. Resolved leniently: the German name with or without umlauts, any casing, a common English exonym or short form also works (München/munich/munchen -> muenchen, cologne -> koeln, frankfurt -> frankfurt-am-main). An unknown name returns 404 with a 'Meintest du ...?' suggestion. list_cities gives the canonical slugs. | |
| stop_id | No | Required stop ID to fetch departures for. Discover a city's stop IDs with get_city_resource(slug, resource='transit') first (each stop carries its id). Format: DELFI 'de:<AGS>:<id>' or a numeric gtfs.de stop id. NOTE: this is NOT the trip_stop_id (nor its deprecated alias stop_id) from station_departures/station_arrivals, whose value identifies one stop of one train run (e.g. '-1203677609210685804-2607251113-13'); passing it returns no_data with a corrective note instead of departures. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| meta | Yes |
weatherWeatherRead-onlyIdempotentInspect
Get current weather observations for a German city.
Sourced from the Deutscher Wetterdienst (DWD): temperature, wind,
precipitation and related fields. Read-only, current conditions only (not a
forecast). For warnings use get_city_resource(slug, resource='weather-warnings'). For a broader question about the city (not
just weather) use get_city_overview instead, which already includes a
live weather highlight.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | Yes | City identifier, e.g. 'berlin' or 'hamburg'. Resolved leniently: the German name with or without umlauts, any casing, a common English exonym or short form also works (München/munich/munchen -> muenchen, cologne -> koeln, frankfurt -> frankfurt-am-main). An unknown name returns 404 with a 'Meintest du ...?' suggestion. list_cities gives the canonical slugs. |
Output Schema
| Name | Required | Description |
|---|---|---|
| data | Yes | |
| meta | Yes |
Claim this connector by publishing a /.well-known/glama.json file on your server's domain with the following structure:
{
"$schema": "https://glama.ai/mcp/schemas/connector.json",
"maintainers": [{ "email": "your-email@example.com" }]
}The email address must match the email associated with your Glama account. Once published, Glama will automatically detect and verify the file within a few minutes.
Control your server's listing on Glama, including description and metadata
Access analytics and receive server usage reports
Get monitoring and health status updates for your server
Feature your server to boost visibility and reach more users
For users:
Full audit trail – every tool call is logged with inputs and outputs for compliance and debugging
Granular tool control – enable or disable individual tools per connector to limit what your AI agents can do
Centralized credential management – store and rotate API keys and OAuth tokens in one place
Change alerts – get notified when a connector changes its schema, adds or removes tools, or updates tool definitions, so nothing breaks silently
For server owners:
Proven adoption – public usage metrics on your listing show real-world traction and build trust with prospective users
Tool-level analytics – see which tools are being used most, helping you prioritize development and documentation
Direct user feedback – users can report issues and suggest improvements through the listing, giving you a channel you would not have otherwise
The connector status is unhealthy when Glama is unable to successfully connect to the server. This can happen for several reasons:
The server is experiencing an outage
The URL of the server is wrong
Credentials required to access the server are missing or invalid
If you are the owner of this MCP connector and would like to make modifications to the listing, including providing test credentials for accessing the server, please contact support@glama.ai.
Discussions
No comments yet. Be the first to start the discussion!
Your Connectors
Sign in to create a connector for this server.