Model Context Protocol · Streamable HTTP

MCP documentation

Five read-only theme tools provide public data about Schleswig city, Germany (AGS 01059075), grouped by topic. REST and MCP use the same domain functions and return the same domain data.

Independent project. Not operated or endorsed by the City of Schleswig.

Connect

Public endpoint: https://schleswig-mcp-data-seven.vercel.app/mcp. Transport: Streamable HTTP. No API key is required.

In an AI client that supports remote MCP servers, add this endpoint as an HTTP server with no authentication. Connect and discover its tools, then call list_schleswig_addresses with {"limit": 1}. Configuration names vary by client; examples for Inspector and VS Code follow.

The service is stateless. Use an MCP client to initialize, discover tools and call them over POST. GET and DELETE return HTTP 405 because there is no standalone SSE notification stream or stored session to delete. Opening /mcp in a browser is not a connection test.

MCP Inspector

npx @modelcontextprotocol/inspector@2.11.0
  1. Open the local Inspector URL printed by the command.
  2. Select Streamable HTTP and enter the public endpoint above. Use Inspector's proxy connection mode so requests originate from its local backend; direct cross-origin browser requests are rejected.
  3. Connect, list tools, then run list_schleswig_addresses with {"limit": 1}.

CLI discovery:

npx @modelcontextprotocol/inspector@2.11.0 --cli https://schleswig-mcp-data-seven.vercel.app/mcp --transport http --method tools/list

See the official Inspector documentation. Inspector 2.11.0 has produced complete results followed by a Windows/Node.js 24 shutdown assertion in local testing; this is a tooling limitation, not a successful CLI exit.

VS Code configuration

Use this in .vscode/mcp.json, following the documented HTTP server configuration:

{
  "servers": {
    "schleswig": {
      "type": "http",
      "url": "https://schleswig-mcp-data-seven.vercel.app/mcp"
    }
  }
}

Start the server from VS Code's MCP controls and confirm that its tools appear. This example follows VS Code's documented format; it has not been tested interactively in VS Code. For local development, use http://127.0.0.1:3000/mcp.

Inputs and pagination

get_schleswig_water_level takes {}. All five list tools and the list datasets of the theme tools accept the same optional arguments:

List tool arguments
Argument Type and behavior
id String, 1–100 characters after trimming; exact, case-sensitive ID.
q String, 1–200 characters after trimming; case-insensitive substring search.
limit Integer 1–100; default 20.
offset Integer 0–9007199254740991; default 0.

Use JSON numbers for integers. Unknown arguments, null inputs and empty strings are invalid. id and q combine with AND. No match or an offset beyond the result returns a successful empty page.

Keep the filters and limit unchanged and follow pagination.nextOffset until null. total counts matching records, returned counts this page, and offset and limit echo the applied pagination. Source order is stable within a snapshot but can change after replacement.

Results

Successful calls contain structuredContent and a matching JSON text entry in content. Water level returns station, measurement, freshness, source and notices. List tools return metadata, data, pagination and notices.

Metadata includes the dataset identifier, municipality, data and source dates, provider, publisher, license, required credit and processing notes. Unknown dates and missing nullable values remain null. Preserve source attribution, license URLs and modification notices when reusing data. German original values are retained.

Each example below shows the complete structuredContent, without repeating the identical text entry. Static examples contain one real snapshot record ({"limit": 1}); the water example is synthetic and is not a current measurement. Full property schemas are available through MCP tools/list; the REST reference documents the same domain responses.

Theme tools

Theme tools group related datasets: choose one with the required dataset argument. Results contain the selected dataset and the same domain data as REST in result. List datasets accept the pagination arguments below; the live water level ignores them.

query_schleswig_water

Datasets: water-level, water-level-history, bathing-waters.

Input: {"dataset":"water-level"}.

Example structuredContent
{
  "dataset": "water-level",
  "result": {
    "station": {
      "id": "09370c05-1041-4395-a5d4-b8db6e59c4c8",
      "number": "9610040",
      "name": "SCHLESWIG",
      "water": "OSTSEE"
    },
    "measurement": {
      "value": 521,
      "unit": "cm",
      "timestamp": "2026-10-14T13:24:00Z",
      "reference": "gauge_zero"
    },
    "freshness": {
      "fetchedAt": "2026-10-14T13:25:00Z",
      "ageSeconds": 60,
      "isStale": false,
      "staleAfterSeconds": 900
    },
    "source": {
      "name": "PEGELONLINE",
      "url": "https://pegelonline.wsv.de/webservices/rest-api/v2/stations/09370c05-1041-4395-a5d4-b8db6e59c4c8.json?includeTimeseries=true&includeCurrentMeasurement=true",
      "license": "DL-DE-Zero-2.0",
      "licenseUrl": "https://www.govdata.de/dl-de/zero-2-0"
    },
    "notices": [
      "Water level relative to the station gauge zero; this is not water depth.",
      "PEGELONLINE provides unvalidated raw measurements."
    ]
  }
}

query_schleswig_population

Datasets: population-forecast, population, population-movement.

Input: {"dataset":"population-forecast","limit":1}.

Example structuredContent
{
  "dataset": "population-forecast",
  "result": {
    "metadata": {
      "id": "schleswig-population-forecast",
      "title": "Population Projection for Schleswig through 2040",
      "description": "One projection document for Schleswig with 39 indicators and historical inputs; values are not all observed population counts.",
      "schemaVersion": "1.0.0",
      "language": "de",
      "municipality": {
        "name": "Schleswig",
        "ags": "01059075"
      },
      "dates": {
        "dataAsOf": null,
        "sourcePublishedAt": "2025-03-21",
        "sourceUpdatedAt": "2025-06-04",
        "retrievedAt": null,
        "curatedAt": null
      },
      "source": {
        "provider": "Wegweiser Kommune",
        "publisher": "Bertelsmann Stiftung",
        "catalog": "GovData",
        "url": "https://www.wegweiser-kommune.de/vorausberechnung-2019-2040-schleswig-holstein",
        "downloadUrl": "https://www.wegweiser-kommune.de/data-api/rest/statistics/data/demografie-bevoelkerungsstand+demografische-prognose-bewegung+bevoelkerung-nach-altersgruppen-1+anteile-der-altersgruppen-1-1+entwicklung-der-altersgruppen-1+generationsentwicklung+gemeinden-und-staedte-und-landkreise-aus-schleswig-holstein+schleswig-holstein+2018-2040+tabelle",
        "format": "JSON"
      },
      "license": {
        "id": "CC0-1.0",
        "url": "https://creativecommons.org/publicdomain/zero/1.0/",
        "attribution": "Bertelsmann Stiftung; Statistische Ämter der Länder, FDZ der Statistischen Ämter des Bundes und der Länder, Deenst GmbH, eigene Berechnungen"
      },
      "temporalCoverage": {
        "years": [
          2018,
          2020,
          2030,
          2035,
          2040
        ]
      },
      "processing": {
        "steps": [
          "Selected region Schleswig with AGS 01059075 and its indicator value arrays.",
          "Preserved the year axis, indicator definitions, source credits and null values.",
          "Updated region selection metadata and indicator minima/maxima for the selected municipality.",
          "Wrapped the prepared source document in the common metadata/data envelope."
        ]
      },
      "recordCount": 1
    },
    "data": [
      {
        "id": "336",
        "name": "Bevölkerung",
        "unit": "Einwohner:innen",
        "explanation": "Dargestellt wird die Anzahl der Personen, die am 31.12. des jeweiligen Jahres in der Kommune leben.",
        "calculation": "Bevölkerung im Jahr z",
        "source": "Statistische Ämter der Länder,FDZ der Statistischen Ämter des Bundes und der Länder, Deenst GmbH, eigene Berechnungen",
        "values": [
          {
            "year": 2018,
            "value": 25280
          },
          {
            "year": 2020,
            "value": 25320
          },
          {
            "year": 2030,
            "value": 26580
          },
          {
            "year": 2035,
            "value": 26650
          },
          {
            "year": 2040,
            "value": 26600
          }
        ]
      }
    ],
    "pagination": {
      "offset": 0,
      "limit": 1,
      "total": 39,
      "returned": 1,
      "nextOffset": 1
    },
    "notices": [
      "Projection with historical inputs; values are not all observed population counts.",
      "metadata.recordCount counts Gold documents; pagination counts indicators. Null values remain missing, not zero."
    ]
  }
}

query_schleswig_economy

Datasets: construction, tourism, municipal-taxes.

Input: {"dataset":"construction","limit":1}.

Example structuredContent
{
  "dataset": "construction",
  "result": {
    "metadata": {
      "id": "schleswig-construction",
      "title": "Residential Construction in Schleswig",
      "description": "Official annual building permits and completions for new residential buildings: buildings, dwellings and living space, from the Regionaldatenbank Deutschland.",
      "schemaVersion": "1.0.0",
      "language": "de",
      "municipality": {
        "name": "Schleswig",
        "ags": "01059075"
      },
      "dates": {
        "dataAsOf": "2024-12-31",
        "sourcePublishedAt": null,
        "sourceUpdatedAt": null,
        "retrievedAt": "2026-10-21T14:45:17.013Z",
        "curatedAt": "2026-10-21T14:45:17.013Z"
      },
      "source": {
        "provider": "Regionaldatenbank Deutschland",
        "publisher": "Statistische Ämter des Bundes und der Länder",
        "catalog": null,
        "url": "https://www.regionalstatistik.de/genesis/online",
        "downloadUrl": null,
        "format": "ffcsv via GENESIS REST API (https://www.regionalstatistik.de/genesisws/rest/2020/data/tablefile)"
      },
      "license": {
        "id": "DL-DE-BY-2.0",
        "url": "https://www.govdata.de/dl-de/by-2-0",
        "attribution": "© Statistische Ämter des Bundes und der Länder, Deutschland, 2026. Datenlizenz Deutschland – Namensnennung – Version 2.0. Tabellen: 31111-01-02-5, 31121-01-02-5."
      },
      "temporalCoverage": {
        "years": [
          2008,
          2009,
          2010,
          2011,
          2012,
          2013,
          2014,
          2015,
          2016,
          2017,
          2018,
          2019,
          2020,
          2021,
          2022,
          2023,
          2024
        ]
      },
      "processing": {
        "steps": [
          "Downloaded tables 31111-01-02-5, 31121-01-02-5 as flat-file CSV, filtered by the source to GEMEIN 01059075 from 2008.",
          "Grouped rows into one series per table, measure and breakdown; sorted values by period.",
          "Converted decimal commas to numbers; kept official signs (\"-\", \".\", \"...\", \"x\", \"/\") in marker with a null value.",
          "Translated field names into English; German labels, units and codes are unchanged."
        ]
      },
      "recordCount": 18
    },
    "data": [
      {
        "id": "31111-01-02-5.BAU015.BAUGEB01.TOTAL",
        "table": {
          "code": "31111-01-02-5",
          "statistic": "Statistik der Baugenehmigungen"
        },
        "measure": {
          "code": "BAU015",
          "label": "Gebäude"
        },
        "unit": "Anzahl",
        "breakdown": [
          {
            "variable": "BAUF03",
            "variableLabel": "Gebäudeart - Wohngebäude",
            "code": "BAUGEB01",
            "label": "Wohngebäude (inkl. Wohnheime)"
          },
          {
            "variable": "GEBWH1",
            "variableLabel": "Gebäude nach Anzahl der Wohnungen",
            "code": null,
            "label": "Insgesamt"
          }
        ],
        "values": [
          {
            "period": "2008",
            "value": 29,
            "marker": null
          },
          {
            "period": "2009",
            "value": 14,
            "marker": null
          },
          {
            "period": "2010",
            "value": 55,
            "marker": null
          },
          {
            "period": "2011",
            "value": 54,
            "marker": null
          },
          {
            "period": "2012",
            "value": 75,
            "marker": null
          },
          {
            "period": "2013",
            "value": 96,
            "marker": null
          },
          {
            "period": "2014",
            "value": 41,
            "marker": null
          },
          {
            "period": "2015",
            "value": 88,
            "marker": null
          },
          {
            "period": "2016",
            "value": 90,
            "marker": null
          },
          {
            "period": "2017",
            "value": 50,
            "marker": null
          },
          {
            "period": "2018",
            "value": 66,
            "marker": null
          },
          {
            "period": "2019",
            "value": 38,
            "marker": null
          },
          {
            "period": "2020",
            "value": 30,
            "marker": null
          },
          {
            "period": "2021",
            "value": 38,
            "marker": null
          },
          {
            "period": "2022",
            "value": 25,
            "marker": null
          },
          {
            "period": "2023",
            "value": 14,
            "marker": null
          },
          {
            "period": "2024",
            "value": 28,
            "marker": null
          }
        ]
      }
    ],
    "pagination": {
      "offset": 0,
      "limit": 1,
      "total": 18,
      "returned": 1,
      "nextOffset": 1
    },
    "notices": [
      "Annual sums of permits and completions for new residential buildings; living space is in 1,000 m².",
      "Official statistics from the Regionaldatenbank Deutschland as published; values are not adjusted by this project. Series may contain methodological breaks; see metadata.source.",
      "A null value carries the official sign in marker: \"-\" nothing (also used where a measure is no longer collected, so it is not converted to 0), \".\" confidential or unknown, \"...\" not yet available, \"x\" not meaningful, \"/\" not reliable enough.",
      "Each record is one series: id is <table>.<measure>.<breakdown codes>; TOTAL marks the total over a breakdown. q searches statistic, measure and breakdown labels."
    ]
  }
}

query_schleswig_mobility

Datasets: charging-stations.

Input: {"dataset":"charging-stations","limit":1}.

Example structuredContent
{
  "dataset": "charging-stations",
  "result": {
    "metadata": {
      "id": "schleswig-charging-stations",
      "title": "Public Charging Stations in Schleswig",
      "description": "Registered publicly accessible electric vehicle charging infrastructure in Schleswig; no live connector availability.",
      "schemaVersion": "1.0.0",
      "language": "de",
      "municipality": {
        "name": "Schleswig",
        "ags": "01059075"
      },
      "dates": {
        "dataAsOf": "2026-09-01",
        "sourcePublishedAt": null,
        "sourceUpdatedAt": "2026-09-01",
        "retrievedAt": null,
        "curatedAt": null
      },
      "source": {
        "provider": "Bundesnetzagentur",
        "publisher": "Bundesnetzagentur",
        "catalog": null,
        "url": "https://www.bundesnetzagentur.de/DE/Fachthemen/ElektrizitaetundGas/E-Mobilitaet/Ladesaeulenkarte/start.html",
        "downloadUrl": "https://data.bundesnetzagentur.de/Bundesnetzagentur/DE/Fachthemen/ElektrizitaetundGas/E-Mobilitaet/Ladesaeulenregister_BNetzA_2026-09-01.csv",
        "format": "UTF-8 semicolon-separated CSV with preamble"
      },
      "license": {
        "id": "CC-BY-4.0",
        "url": "https://creativecommons.org/licenses/by/4.0/",
        "attribution": "Bundesnetzagentur.de"
      },
      "coordinateReferenceSystem": "EPSG:4326",
      "processing": {
        "steps": [
          "Selected Ort Schleswig, postal code 24837 and state Schleswig-Holstein.",
          "Selected and renamed fields; grouped addresses, coordinates, charging points and connectors.",
          "Converted decimal commas to numbers and commissioning dates to ISO dates.",
          "Converted empty optional fields and unspecified opening hours to null; split payment methods and connector lists and removed empty list entries.",
          "Retained the source opening-hours code; omitted separate weekday and time-detail columns."
        ]
      },
      "recordCount": 61
    },
    "data": [
      {
        "id": "1040095",
        "operator": "Stadtwerke SH GmbH & Co. KG",
        "displayName": "Stadtwerke SH",
        "status": "In Betrieb",
        "stationType": "Normalladeeinrichtung",
        "chargingPointCount": 2,
        "ratedPowerKw": 22,
        "commissionedAt": "2017-03-10",
        "address": {
          "street": "Friedrich-Ebert-Straße",
          "houseNumber": "1",
          "addressSuffix": null,
          "postalCode": "24837",
          "city": "Schleswig"
        },
        "coordinates": {
          "latitude": 54.518628,
          "longitude": 9.551668
        },
        "locationName": null,
        "parkingInformation": null,
        "paymentMethods": [],
        "openingHours": null,
        "chargingPoints": [
          {
            "position": 1,
            "connectors": [
              {
                "connectorType": "AC Typ 2 Steckdose",
                "ratedPowerKw": 22
              }
            ],
            "evseId": null,
            "publicKey": null
          },
          {
            "position": 2,
            "connectors": [
              {
                "connectorType": "AC Typ 2 Steckdose",
                "ratedPowerKw": 22
              }
            ],
            "evseId": null,
            "publicKey": null
          }
        ]
      }
    ],
    "pagination": {
      "offset": 0,
      "limit": 1,
      "total": 61,
      "returned": 1,
      "nextOffset": 1
    },
    "notices": [
      "Register status is not live connector availability. The register is not exhaustive.",
      "Opening hours retain the source code; separate weekday and time details are not included."
    ]
  }
}

query_schleswig_places

Datasets: addresses, monuments.

Input: {"dataset":"addresses","limit":1}.

Example structuredContent
{
  "dataset": "addresses",
  "result": {
    "metadata": {
      "id": "schleswig-addresses",
      "title": "Addresses in Schleswig",
      "description": "Official ALKIS house coordinates for Schleswig, transformed to WGS 84.",
      "schemaVersion": "1.0.0",
      "language": "de",
      "municipality": {
        "name": "Schleswig",
        "ags": "01059075"
      },
      "dates": {
        "dataAsOf": "2026-06-01",
        "sourcePublishedAt": null,
        "sourceUpdatedAt": null,
        "retrievedAt": null,
        "curatedAt": null
      },
      "source": {
        "provider": "LVermGeo SH",
        "publisher": "Landesamt für Vermessung und Geoinformation Schleswig-Holstein",
        "catalog": null,
        "url": "https://geodaten.schleswig-holstein.de/gaialight-sh/_apps/dladownload/dl-hk_alkis.html",
        "downloadUrl": null,
        "format": "UTF-8 semicolon-separated TXT"
      },
      "license": {
        "id": "CC-BY-4.0",
        "url": "https://creativecommons.org/licenses/by/4.0/",
        "attribution": "©GeoBasis-DE/LVermGeo SH/CC BY 4.0 (Quelle verändert)"
      },
      "coordinateReferenceSystem": "EPSG:4326",
      "processing": {
        "steps": [
          "Filtered by official state 01, district 59 and municipality 075; verified administrative region 0 and AGS 01059075.",
          "Selected address fields, preserving original OIDs, street names, string identifiers and source record order.",
          "Converted empty address extras and postal codes to null.",
          "Transformed EPSG:25832 easting/northing to EPSG:4326 latitude/longitude with pyproj 3.7.2 and PROJ 9.5.1, without decimal rounding.",
          "Verified field preservation, municipality membership, unique IDs, coordinate ranges, reference points and inverse coordinate transformations."
        ]
      },
      "recordCount": 7619
    },
    "data": [
      {
        "id": "DESHPDHK0002Nh66",
        "street": "Abelsteg",
        "streetCode": "00001",
        "houseNumber": "1",
        "addressExtra": null,
        "postalCode": "24837",
        "latitude": 54.495393021595085,
        "longitude": 9.528569497620593
      }
    ],
    "pagination": {
      "offset": 0,
      "limit": 1,
      "total": 7619,
      "returned": 1,
      "nextOffset": 1
    },
    "notices": [
      "Coordinates use EPSG:4326. Postal codes were not reconciled with Deutsche Post."
    ]
  }
}

Deprecated single-dataset tools

These tools remain available during a transition period and return the same data without the dataset wrapper. Use the theme tools above for new integrations.

get_schleswig_water_level

Live PEGELONLINE measurement for station SCHLESWIG. No query parameters. Values are centimetres relative to gauge zero, not water depth. Unvalidated raw measurements are not navigation advice or flood warnings. Measurements older than 15 minutes still return 200 with freshness.isStale=true. Each request fetches upstream data with a five-second timeout; avoid unnecessary polling.

Input: {}.

Example structuredContent
{
  "station": {
    "id": "09370c05-1041-4395-a5d4-b8db6e59c4c8",
    "number": "9610040",
    "name": "SCHLESWIG",
    "water": "OSTSEE"
  },
  "measurement": {
    "value": 521,
    "unit": "cm",
    "timestamp": "2026-10-14T13:24:00Z",
    "reference": "gauge_zero"
  },
  "freshness": {
    "fetchedAt": "2026-10-14T13:25:00Z",
    "ageSeconds": 60,
    "isStale": false,
    "staleAfterSeconds": 900
  },
  "source": {
    "name": "PEGELONLINE",
    "url": "https://pegelonline.wsv.de/webservices/rest-api/v2/stations/09370c05-1041-4395-a5d4-b8db6e59c4c8.json?includeTimeseries=true&includeCurrentMeasurement=true",
    "license": "DL-DE-Zero-2.0",
    "licenseUrl": "https://www.govdata.de/dl-de/zero-2-0"
  },
  "notices": [
    "Water level relative to the station gauge zero; this is not water depth.",
    "PEGELONLINE provides unvalidated raw measurements."
  ]
}

list_schleswig_addresses

Prepared ALKIS address snapshot for Schleswig. Search street, house number/addition and postal code. Coordinates use EPSG:4326. Postal codes were not reconciled with Deutsche Post. Nullable addressExtra and postalCode are explicit nulls, not omitted properties.

Input: {"limit": 1}.

Example structuredContent
{
  "metadata": {
    "id": "schleswig-addresses",
    "title": "Addresses in Schleswig",
    "description": "Official ALKIS house coordinates for Schleswig, transformed to WGS 84.",
    "schemaVersion": "1.0.0",
    "language": "de",
    "municipality": {
      "name": "Schleswig",
      "ags": "01059075"
    },
    "dates": {
      "dataAsOf": "2026-06-01",
      "sourcePublishedAt": null,
      "sourceUpdatedAt": null,
      "retrievedAt": null,
      "curatedAt": null
    },
    "source": {
      "provider": "LVermGeo SH",
      "publisher": "Landesamt für Vermessung und Geoinformation Schleswig-Holstein",
      "catalog": null,
      "url": "https://geodaten.schleswig-holstein.de/gaialight-sh/_apps/dladownload/dl-hk_alkis.html",
      "downloadUrl": null,
      "format": "UTF-8 semicolon-separated TXT"
    },
    "license": {
      "id": "CC-BY-4.0",
      "url": "https://creativecommons.org/licenses/by/4.0/",
      "attribution": "©GeoBasis-DE/LVermGeo SH/CC BY 4.0 (Quelle verändert)"
    },
    "coordinateReferenceSystem": "EPSG:4326",
    "processing": {
      "steps": [
        "Filtered by official state 01, district 59 and municipality 075; verified administrative region 0 and AGS 01059075.",
        "Selected address fields, preserving original OIDs, street names, string identifiers and source record order.",
        "Converted empty address extras and postal codes to null.",
        "Transformed EPSG:25832 easting/northing to EPSG:4326 latitude/longitude with pyproj 3.7.2 and PROJ 9.5.1, without decimal rounding.",
        "Verified field preservation, municipality membership, unique IDs, coordinate ranges, reference points and inverse coordinate transformations."
      ]
    },
    "recordCount": 7619
  },
  "data": [
    {
      "id": "DESHPDHK0002Nh66",
      "street": "Abelsteg",
      "streetCode": "00001",
      "houseNumber": "1",
      "addressExtra": null,
      "postalCode": "24837",
      "latitude": 54.495393021595085,
      "longitude": 9.528569497620593
    }
  ],
  "pagination": {
    "offset": 0,
    "limit": 1,
    "total": 7619,
    "returned": 1,
    "nextOffset": 1
  },
  "notices": [
    "Coordinates use EPSG:4326. Postal codes were not reconciled with Deutsche Post."
  ]
}

list_schleswig_monuments

Prepared, non-exhaustive cultural monument register. Search name or address. Numeric source object identifiers are exposed as string IDs. Optional address, protection and photo fields may be absent. Photo URLs are references; images are not fetched or hosted.

Input: {"limit": 1}.

Example structuredContent
{
  "metadata": {
    "id": "schleswig-monuments",
    "title": "Cultural Monuments in Schleswig",
    "description": "Listed cultural monuments within the city of Schleswig.",
    "schemaVersion": "1.0.0",
    "language": "de",
    "municipality": {
      "name": "Schleswig",
      "ags": "01059075"
    },
    "dates": {
      "dataAsOf": "2026-10-12",
      "sourcePublishedAt": "2026-10-12",
      "sourceUpdatedAt": "2026-10-12",
      "retrievedAt": null,
      "curatedAt": null
    },
    "source": {
      "provider": "Landesamt für Denkmalpflege Schleswig-Holstein",
      "publisher": "Landesamt für Denkmalpflege Schleswig-Holstein",
      "catalog": "Open Data SH",
      "url": "https://opendata.schleswig-holstein.de/dataset/denkmalliste-2026-10-12",
      "downloadUrl": "https://opendata.schleswig-holstein.de/dataset/f67c373c-3665-4ddf-946b-285b550a72a4/resource/810e96ef-0cf3-445a-a3ce-080d77696930/download/denkmalliste.json",
      "format": "JSON"
    },
    "license": {
      "id": "CC-BY-4.0",
      "url": "https://creativecommons.org/licenses/by/4.0/",
      "attribution": "Landesamt für Denkmalpflege Schleswig-Holstein"
    },
    "processing": {
      "steps": [
        "Selected records for Schleswig, Stadt in Kreis Schleswig-Flensburg.",
        "Renamed source fields to English keys; preserved object identifiers, protection details and photo URLs.",
        "Restored the original German description for object 10545 and name for object 9381 after detecting unintended text replacement."
      ]
    },
    "recordCount": 251
  },
  "data": [
    {
      "id": "33001",
      "name": "Fischersiedlung Holm in Schleswig",
      "description": "Der Denkmalbereich umfasst die historische Fischersiedlung Holm einschließlich des ehemaligen Zugangs von der Schleswiger Altstadt (Fischbrückstraße), der der Lage des ehemaligen Steintors entspricht. Der Denkmalbereich wird im Wesentlichen wie folgt begrenzt: 1. im Norden und Nordwesten durch die Fahrbahn der Knud-Laward-Straße und einem Geviert an der Fischbrückstraße (Nummer 15, 16 und 18),2. im Osten durch die Fahrbahnen der Straße Wiesengang und der Grundstücksgrenze des Klosterbereichs St. Johannis am Nienstall,3. im Südwesten und Süden durch die nördliche Uferlinie der Schlei.",
      "heritageType": "Schutzzone",
      "municipality": "Schleswig, Stadt",
      "district": "Kreis Schleswig-Flensburg"
    }
  ],
  "pagination": {
    "offset": 0,
    "limit": 1,
    "total": 251,
    "returned": 1,
    "nextOffset": 1
  },
  "notices": [
    "Snapshot of a non-exhaustive register. Photo URLs are source references; image contents are not fetched."
  ]
}

list_schleswig_bathing_waters

Prepared bathing-water reference locations. Search name or keywords. No current water quality, opening status or swimming safety assessment. Use EPSG:4326 longitude/latitude: the source declares EPSG:4647 for projected coordinates, but its eastings omit the zone prefix. The original values and declaration remain documented in metadata.projectedCoordinates.

Input: {"limit": 1}.

Example structuredContent
{
  "metadata": {
    "id": "schleswig-bathing-waters",
    "title": "Bathing Waters in Schleswig",
    "description": "Bathing-water reference locations and characteristics for Schleswig; no current water-quality assessment.",
    "schemaVersion": "1.0.0",
    "language": "de",
    "municipality": {
      "name": "Schleswig",
      "ags": "01059075"
    },
    "dates": {
      "dataAsOf": null,
      "sourcePublishedAt": "2026-04-01",
      "sourceUpdatedAt": "2026-04-01",
      "retrievedAt": null,
      "curatedAt": null
    },
    "source": {
      "provider": "Ministerium für Justiz und Gesundheit Schleswig-Holstein",
      "publisher": "Ministerium für Justiz und Gesundheit Schleswig-Holstein",
      "catalog": "GovData",
      "url": "https://www.govdata.de/suche/daten/badegewasser-stammdaten",
      "downloadUrl": "https://efi2.schleswig-holstein.de/bg/opendata/v_badegewaesser_odata.csv",
      "format": "ISO-8859-1 pipe-separated CSV"
    },
    "license": {
      "id": "CC-BY-4.0",
      "url": "https://creativecommons.org/licenses/by/4.0/",
      "attribution": "Sozialministerium S-H"
    },
    "coordinateReferenceSystem": "EPSG:4326",
    "projectedCoordinates": {
      "fields": [
        "utmEasting",
        "utmNorthing"
      ],
      "sourceDeclaredCrs": "EPSG:4647",
      "note": "Source metadata declares EPSG:4647, but the retained eastings have no zone prefix. Values are preserved; use longitude/latitude for spatial operations."
    },
    "processing": {
      "steps": [
        "Selected Schleswig city records with district code 59 and municipality code 075.",
        "Selected and renamed attributes; converted numeric strings to numbers and registration dates to ISO dates.",
        "Converted empty optional values to null and split comma-separated keywords.",
        "Removed trailing HTML line breaks from the Luisenbad description; retained source coordinate values without transformation."
      ]
    },
    "recordCount": 2
  },
  "data": [
    {
      "id": "DESH_PR_0349",
      "name": "Schlei, Schleswig, Auf der Freiheit",
      "waterCategory": "Küstengewässer",
      "coastalSea": "Ostsee",
      "bathingWaterType": "bereits bestehendes Badegewässer",
      "additionalDescription": "natürlich",
      "euRegistrationDate": "2018-04-15",
      "euDeregistrationDate": null,
      "riverBasinDistrictId": "9610",
      "riverBasinDistrictName": "Schlei / Trave",
      "waterBodyId": "B2.9610.07.04",
      "waterBodyName": "innere Schlei",
      "keywords": [
        "Schlei",
        "Schleswig",
        "Auf Der Freiheit"
      ],
      "districtCode": "59",
      "districtName": "Schleswig-Flensburg",
      "municipalityCode": "075",
      "municipalityName": "Schleswig, Stadt",
      "utmEasting": 538025.01093039,
      "utmNorthing": 6040459.002811428,
      "longitude": 9.588478374263024,
      "latitude": 54.51195046051083,
      "bathingSiteInformation": "Die Badestelle \"Auf der Freiheit\" befindet sich auf einem ehemaligen Bundeswehrgelände. Mittlerweile sind hier großzügig gestaltete Grünanlagen mit zahlreichen Sitzmöglichkeiten direkt am Schleiufer der \"Kleinen Breite\" geschaffen worden. In unmittelbarer Nähe der Badestelle wird das Restaurant/Hotel \"Strandleben\" betrieben. Neben dem kleinen sandigen Strand gibt es große Grasliegeflächen.",
      "impactAssessment": "Unter normalen Wetter- und Umgebungsbedingungen sind keine Auswirkungen auf die Badegewässerqualität bekannt",
      "potentialPollutionSources": null
    }
  ],
  "pagination": {
    "offset": 0,
    "limit": 1,
    "total": 2,
    "returned": 1,
    "nextOffset": 1
  },
  "notices": [
    "Reference data only; no current water quality, opening status or swimming safety assessment.",
    "Use longitude/latitude. The source declaration of the projected coordinate system is inconsistent with its unprefixed eastings."
  ]
}

list_schleswig_charging_stations

Prepared, non-exhaustive charging infrastructure register. Search operator, display name or street/house number. Register status does not indicate live connector availability. Opening hours retain the source code without separate weekday/time details. Nullable text fields remain explicit nulls. Coordinates use EPSG:4326.

Input: {"limit": 1}.

Example structuredContent
{
  "metadata": {
    "id": "schleswig-charging-stations",
    "title": "Public Charging Stations in Schleswig",
    "description": "Registered publicly accessible electric vehicle charging infrastructure in Schleswig; no live connector availability.",
    "schemaVersion": "1.0.0",
    "language": "de",
    "municipality": {
      "name": "Schleswig",
      "ags": "01059075"
    },
    "dates": {
      "dataAsOf": "2026-09-01",
      "sourcePublishedAt": null,
      "sourceUpdatedAt": "2026-09-01",
      "retrievedAt": null,
      "curatedAt": null
    },
    "source": {
      "provider": "Bundesnetzagentur",
      "publisher": "Bundesnetzagentur",
      "catalog": null,
      "url": "https://www.bundesnetzagentur.de/DE/Fachthemen/ElektrizitaetundGas/E-Mobilitaet/Ladesaeulenkarte/start.html",
      "downloadUrl": "https://data.bundesnetzagentur.de/Bundesnetzagentur/DE/Fachthemen/ElektrizitaetundGas/E-Mobilitaet/Ladesaeulenregister_BNetzA_2026-09-01.csv",
      "format": "UTF-8 semicolon-separated CSV with preamble"
    },
    "license": {
      "id": "CC-BY-4.0",
      "url": "https://creativecommons.org/licenses/by/4.0/",
      "attribution": "Bundesnetzagentur.de"
    },
    "coordinateReferenceSystem": "EPSG:4326",
    "processing": {
      "steps": [
        "Selected Ort Schleswig, postal code 24837 and state Schleswig-Holstein.",
        "Selected and renamed fields; grouped addresses, coordinates, charging points and connectors.",
        "Converted decimal commas to numbers and commissioning dates to ISO dates.",
        "Converted empty optional fields and unspecified opening hours to null; split payment methods and connector lists and removed empty list entries.",
        "Retained the source opening-hours code; omitted separate weekday and time-detail columns."
      ]
    },
    "recordCount": 61
  },
  "data": [
    {
      "id": "1040095",
      "operator": "Stadtwerke SH GmbH & Co. KG",
      "displayName": "Stadtwerke SH",
      "status": "In Betrieb",
      "stationType": "Normalladeeinrichtung",
      "chargingPointCount": 2,
      "ratedPowerKw": 22,
      "commissionedAt": "2017-03-10",
      "address": {
        "street": "Friedrich-Ebert-Straße",
        "houseNumber": "1",
        "addressSuffix": null,
        "postalCode": "24837",
        "city": "Schleswig"
      },
      "coordinates": {
        "latitude": 54.518628,
        "longitude": 9.551668
      },
      "locationName": null,
      "parkingInformation": null,
      "paymentMethods": [],
      "openingHours": null,
      "chargingPoints": [
        {
          "position": 1,
          "connectors": [
            {
              "connectorType": "AC Typ 2 Steckdose",
              "ratedPowerKw": 22
            }
          ],
          "evseId": null,
          "publicKey": null
        },
        {
          "position": 2,
          "connectors": [
            {
              "connectorType": "AC Typ 2 Steckdose",
              "ratedPowerKw": 22
            }
          ],
          "evseId": null,
          "publicKey": null
        }
      ]
    }
  ],
  "pagination": {
    "offset": 0,
    "limit": 1,
    "total": 61,
    "returned": 1,
    "nextOffset": 1
  },
  "notices": [
    "Register status is not live connector availability. The register is not exhaustive.",
    "Opening hours retain the source code; separate weekday and time details are not included."
  ]
}

list_schleswig_population_forecast

Prepared indicators with year/value pairs for 2018, 2020, 2030, 2035 and 2040; no 2025 axis. Search indicator name. Historical inputs and projections are not all observed counts. Units vary by indicator; null values are missing, not zero. Pagination counts 39 indicators, while metadata.recordCount counts the single Gold source document.

Input: {"limit": 1}.

Example structuredContent
{
  "metadata": {
    "id": "schleswig-population-forecast",
    "title": "Population Projection for Schleswig through 2040",
    "description": "One projection document for Schleswig with 39 indicators and historical inputs; values are not all observed population counts.",
    "schemaVersion": "1.0.0",
    "language": "de",
    "municipality": {
      "name": "Schleswig",
      "ags": "01059075"
    },
    "dates": {
      "dataAsOf": null,
      "sourcePublishedAt": "2025-03-21",
      "sourceUpdatedAt": "2025-06-04",
      "retrievedAt": null,
      "curatedAt": null
    },
    "source": {
      "provider": "Wegweiser Kommune",
      "publisher": "Bertelsmann Stiftung",
      "catalog": "GovData",
      "url": "https://www.wegweiser-kommune.de/vorausberechnung-2019-2040-schleswig-holstein",
      "downloadUrl": "https://www.wegweiser-kommune.de/data-api/rest/statistics/data/demografie-bevoelkerungsstand+demografische-prognose-bewegung+bevoelkerung-nach-altersgruppen-1+anteile-der-altersgruppen-1-1+entwicklung-der-altersgruppen-1+generationsentwicklung+gemeinden-und-staedte-und-landkreise-aus-schleswig-holstein+schleswig-holstein+2018-2040+tabelle",
      "format": "JSON"
    },
    "license": {
      "id": "CC0-1.0",
      "url": "https://creativecommons.org/publicdomain/zero/1.0/",
      "attribution": "Bertelsmann Stiftung; Statistische Ämter der Länder, FDZ der Statistischen Ämter des Bundes und der Länder, Deenst GmbH, eigene Berechnungen"
    },
    "temporalCoverage": {
      "years": [
        2018,
        2020,
        2030,
        2035,
        2040
      ]
    },
    "processing": {
      "steps": [
        "Selected region Schleswig with AGS 01059075 and its indicator value arrays.",
        "Preserved the year axis, indicator definitions, source credits and null values.",
        "Updated region selection metadata and indicator minima/maxima for the selected municipality.",
        "Wrapped the prepared source document in the common metadata/data envelope."
      ]
    },
    "recordCount": 1
  },
  "data": [
    {
      "id": "336",
      "name": "Bevölkerung",
      "unit": "Einwohner:innen",
      "explanation": "Dargestellt wird die Anzahl der Personen, die am 31.12. des jeweiligen Jahres in der Kommune leben.",
      "calculation": "Bevölkerung im Jahr z",
      "source": "Statistische Ämter der Länder,FDZ der Statistischen Ämter des Bundes und der Länder, Deenst GmbH, eigene Berechnungen",
      "values": [
        {
          "year": 2018,
          "value": 25280
        },
        {
          "year": 2020,
          "value": 25320
        },
        {
          "year": 2030,
          "value": 26580
        },
        {
          "year": 2035,
          "value": 26650
        },
        {
          "year": 2040,
          "value": 26600
        }
      ]
    }
  ],
  "pagination": {
    "offset": 0,
    "limit": 1,
    "total": 39,
    "returned": 1,
    "nextOffset": 1
  },
  "notices": [
    "Projection with historical inputs; values are not all observed population counts.",
    "metadata.recordCount counts Gold documents; pagination counts indicators. Null values remain missing, not zero."
  ]
}

Errors and limitations

Source failures produce isError: true and a JSON text error, without a success structuredContent. For example:

{
  "isError": true,
  "content": [{
    "type": "text",
    "text": "{\"error\":{\"code\":\"DATA_NOT_FOUND\",\"message\":\"The prepared dataset is missing.\"}}"
  }]
}

Invalid tool arguments and transport errors use the MCP SDK's protocol error handling. Host and Origin checks remain enforced; cross-origin browser calls are unsupported. Requests are limited to 64 KiB, lists to 100 records. Only water level calls an external service at request time; avoid unnecessary polling. Snapshots change only after replacement and restart or redeployment.

Tool schemas use JSON Schema 2020-12. Required nullable properties must be present, but their value may be null. Clients translating schemas to narrower dialects may need their own adaptation.