get_cityLABSCO SUMMARY
One overview call instead of twenty exploratory ones.
The design decision that matters for agents is get_city_overview: it returns the catalogue of what exists for that city plus live highlights in one shot, so the model sees the full breadth rather than stopping at the weather. The generic get_city_resource then covers the long tail without bloating the tool list. Field names are English snake_case and stable; some responses still carry older German duplicates with identical values, and the docs are explicit that those are deprecated — use the canonical names.
What it is
A hosted MCP server over a normalising layer for German public open data. German cities publish plenty, but every source has its own format, fields and registration; InfraNode maps 25+ upstream sources — DWD, UBA, Mobilithek/DELFI, VBB, GovData, OpenStreetMap, Bundesnetzagentur, KBA and others — onto one canonical response shape, and serves the result over a remote endpoint with no API key and no account.
What you get
- A single call that returns a city's base data, a catalogue of all 82 data types with coverage status, and a live snapshot of the headline values — the intended entry point —
get_city_overview - Any of those 82 data types fetched by its resource key, so one tool covers everything without 82 tool definitions in your context —
get_city_resource - Named tools for the ones you reach for constantly: current observations, official air quality, points of interest by type, and a city's base record —
weather,air_quality,pois,get_city - Live rail boards by EVA station number, including local trains and disruptions, and live public-transport departures with real-time delays —
station_board_departures,station_board_arrivals,transit_departures - Coverage and provenance you can check: every covered city listed, and every source with its licence, attribution and status —
list_cities,sources - One data type compared across several cities in a single call —
compare - Ready-made prompts
city_briefing,compare_air_quality,commute_checkand the resourcesinfranode://citiesandinfranode://sources - Every tool annotated
readOnlyHint: true,destructiveHint: false,idempotentHint: true, so a client can auto-approve them safely
Requirements
Nothing — no account, no key, read-only. Point any client at the Streamable HTTP endpoint https://mcp.infranode.dev/mcp; with Claude Code that is claude mcp add --transport http infranode https://mcp.infranode.dev/mcp. Self-hosting is optional and documented, with the API stack under Docker Compose and the MCP server over stdio against the public API. Every response carries attribution per record and meta.source_status, so a dead upstream degrades to a status flag instead of failing the call — and the data licences require you to pass that attribution through.
Setup effort
One command — claude mcp add --transport http infranode https://mcp.infranode.dev/mcp
USE CASES
Getting oriented on a city you have never queried
One overview call returns the base record, the catalogue of every data type with coverage status, and a live snapshot — so you know what exists before you ask for anything specific.
Answering a commute question with live data
Pull real-time departures with delays for the stop, or the full station board by EVA number when you need long-distance and local trains together with disruptions.
Comparing cities on one measure
Ask for the same resource across several cities in a single call rather than looping, then cite the attribution each record carries.
Reaching a data type with no dedicated tool
Use the generic accessor with the resource key — land values, tax rates, charging points, council papers, bathing water — instead of hunting for a specific tool.
Checking whether a number is safe to publish
List the sources with their licences and current status, and read meta.source_status on the response, before putting the figure in front of someone.
12 tools
Listed in project docs. Your client may show a different list.
get_city_overviewget_city_resourceair_qualityweatherpoisstation_board_departuresstation_board_arrivalstransit_departureslist_citiessourcescompareBEFORE YOU INSTALL
What to know first
Tools you get
12 tools named in the project's documentation.
Requires
A client that can reach a remote MCP server over HTTP
INSTALLATION
Connect your client
Server setup
claude mcp add
Claude Code — remote
claude mcp add --transport http infranode https://mcp.infranode.dev/mcpHosted endpoint
https://mcp.infranode.dev/mcpAdd this hosted endpoint to your MCP client.
MCP Clients
Claude Code — stdio
claude mcp add infranode -- uv run --group mcp python -m infranode.mcpClaude Desktop — stdio
{
"mcpServers": {
"infranode": {
"command": "uv",
"args": [
"run",
"--group",
"mcp",
"python",
"-m",
"infranode.mcp"
],
"env": {
"INFRANODE_MCP_API_BASE": "http://localhost:8000/api/v1"
}
}
}
}Cursor — remote
{
"mcpServers": {
"infranode": {
"url": "https://mcp.infranode.dev/mcp"
}
}
}Windsurf — remote
{
"mcpServers": {
"infranode": {
"serverUrl": "https://mcp.infranode.dev/mcp"
}
}
}VS Code
code --add-mcp '{"name":"infranode","url":"https://mcp.infranode.dev/mcp"}'