CityDPC-MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| MCP_DATASET_DIR | No | Directory containing datasets. Defaults to mcp-server/data/datasets/ | mcp-server/data/datasets/ |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {
"tasks": {
"list": {},
"cancel": {},
"requests": {
"tools": {
"call": {}
},
"prompts": {
"get": {}
},
"resources": {
"read": {}
}
}
}
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| list_datasetsB | Listet alle verfügbaren GML- oder JSON-Datasets im Data-Verzeichnis auf. Returns: list[str]: Liste aller verfügbaren Dataset-Dateinamen |
| load_datasetB | Lädt ein Dataset aus einer GML- oder JSON-Datei. Erstellt automatisch einen Snapshot des ursprünglichen Zustands. Args: filename: Der Name der GML- oder JSON-Datei (z.B. 'EssenExample.gml') Returns: str: Erfolgsmeldung oder Fehlermeldung |
| create_datasetA | Erstellt ein neues, leeres Dataset als GML- oder JSON-Datei und lädt es. Praktisch zum Testen: Danach können direkt mit create_building() Gebäude hinzugefügt und mit save_dataset() gespeichert werden. Bestehende Dateien werden nicht überschrieben. Args: filename: Name der neuen Datei, Endung '.json' (CityJSON) oder '.gml' (CityGML), z.B. 'test.city.json' title: Optionaler Titel des Datasets epsg: EPSG-Code des Koordinatenreferenzsystems (Standard: 25832 = ETRS89 / UTM 32N) Returns: str: Erfolgsmeldung oder Fehlermeldung |
| filter_datasetA | Filtert das Dataset nach Adressen oder Koordinaten und setzt das gefilterte Dataset als aktives Dataset. Das gefilterte Dataset wird zum neuen aktiven Dataset. Alle nachfolgenden Tool-Aufrufe arbeiten dann nur mit den gefilterten Gebäuden. Mit load_dataset() kann jederzeit das Original neu geladen werden. WICHTIG: Nach dem Filtern können keine Änderungen mehr gespeichert werden, um das Original zu schützen. Die History wird geleert! Args: addressRestriciton: Dictionary mit Adressbeschränkungen (z.B. {"thoroughfareName": "Stakenholt"}) borderCoordinates: Liste von Koordinaten für einen rechteckigen Bereich (z.B. [[x1,y1], [x2,y2], [x3,y3], [x4,y4]]) Returns: dict: Informationen zum gefilterten Dataset (building_count, minimum, maximum, filepath, title) |
| analyse_datasetB | Analysiert das Dataset und gibt detaillierte Informationen über die Gebäude zurück. Returns: dict: Analyse-Ergebnisse mit Informationen über GML-Version, CRS, LoD, Anzahl Gebäude etc. |
| number_of_buildingsA | Gibt die Anzahl der Gebäude im aktuellen Dataset zurück. Returns: int: Anzahl der Gebäude |
| get_all_buildingsB | Gibt Informationen zu allen Gebäuden im Dataset zurück. Returns: list[dict]: Liste mit Dictionaries aller Gebäude und deren Attributen |
| get_buiding_Id_listB | Gibt eine Liste aller Gebäude-IDs im Dataset zurück. Returns: list[str]: Liste aller gml:id Werte der Gebäude |
| get_party_wallsB | Findet alle angrenzenden Wände (Party Walls) zwischen Gebäuden im Dataset. Returns: list: Liste aller erkannten Party Walls als [id of b0, id of w0, id of b1, id of w1, area, collision coordinates] |
| get_building_by_idB | Gibt alle Informationen zu einem spezifischen Gebäude zurück. Args: building_id: Die gml:id des Gebäudes Returns: dict: Dictionary mit allen Gebäude-Attributen |
| calculate_roof_volume_by_idB | Berechnet das Dachvolumen für ein spezifisches Gebäude. Args: building_id: Die gml:id des Gebäudes Returns: float: Das berechnete Dachvolumen in Kubikmetern |
| create_buildingA | Erstellt ein neues Gebäude mit wählbarem Detaillierungsgrad (LoD 0/1/2). LoD: 0=2D-Grundfläche | 1=3D-Quader | 2=3D mit Dachgeometrie (Standard) Das Gebäude wird direkt zum aktiven Dataset hinzugefügt (Single Source of Truth). Verwende take_snapshot() vor dem Erstellen und save_dataset() zum Speichern. Args: id: Eindeutige Gebäude-ID groundsCoordinates: 2D-Grundriss als Liste von Koordinaten [[x1,y1], [x2,y2], ..., [x1,y1]] groundSurfaceHeight: Bodenhöhe in Metern geometryHeight: Gebäudehöhe in Metern (erforderlich für LoD 1+2) roofType: Dachtyp (für LoD 2): "1000"=Flach, "1010"=Pult, "1020"=Pult versetzt, "1030"=Sattel, "1040"=Walm, "1070"=Zelt roofHeight: Dachhöhe in Metern (für LoD 2, außer "1000") roofOrientation: Dachausrichtung als Koordinaten-Index (für "1010","1020","1030") lod: Detaillierungsgrad 0-2 (Standard: 2) isRoofEdge: Für LoD 0, ob Koordinaten Dachkante sind (Standard: False) Returns: dict: Das erstellte Gebäude mit allen Attributen und Bounding Box |
| remove_building_from_datasetA | Entfernt ein Gebäude aus dem Dataset. Die Änderung wird direkt im Dataset vorgenommen (Single Source of Truth). Verwende take_snapshot() vor wichtigen Änderungen und save_dataset() zum Speichern. Args: building_id: Die gml:id des zu entfernenden Gebäudes Returns: dict: Bestätigungsmeldung mit Anzahl verbleibender Gebäude |
| enrich_buildingA | Reichert ein Gebäude mit semantischen Informationen an. Die Änderungen werden direkt im Dataset vorgenommen (Single Source of Truth). Verwende take_snapshot() vor wichtigen Änderungen und save_dataset() zum Speichern. Args: building_id: Die gml:id des Gebäudes measured_height: Gemessene Gebäudehöhe in Metern roof_type: Dachtyp-Code (z.B. "1000"=Flach, "1030"=Sattel, "1040"=Walm, "3100"=andere) roof_height: Dachhöhe in Metern function: Gebäudefunktion-Code nach CityGML (z.B. "31001_1010"=Wohngebäude, "31001_2000"=Gewerbe) usage: Nutzung des Gebäudes (z.B. "residential", "commercial", "industrial") year_of_construction: Baujahr (z.B. 2020) storeys_above_ground: Anzahl der Stockwerke über dem Boden storeys_below_ground: Anzahl der Stockwerke unter dem Boden (Keller) creation_date: Erstellungsdatum des Gebäudes (ISO-Format: "2020-01-15") Returns: dict: Das angereicherte Gebäude mit allen Attributen |
| remove_building_attributesA | Entfernt Attribute eines Gebäudes (setzt sie auf None). Args: building_id: Die gml:id des Gebäudes attributes: Liste von Attributnamen (gleiche Namen wie in enrich_building, z.B. "measuredHeight", "roofType"). Unbekannte Namen werden ignoriert. Returns: dict: Das aktualisierte Gebäude mit allen Attributen |
| take_snapshotA | Erstellt einen Snapshot des aktuellen Dataset-Zustands. Wie ein Git-Commit: Speichert den aktuellen Zustand für spätere Rollbacks. Args: description: Beschreibung des Snapshots Returns: dict: Informationen über den erstellten Snapshot |
| rollback_to_snapshotA | Stellt einen früheren Dataset-Zustand wieder her. Wie Git-Reset: Kehrt zu einem gespeicherten Zustand zurück. Alle Änderungen nach diesem Snapshot gehen verloren! Args: snapshot_index: Index des Snapshots (von get_dataset_history() erhalten) Returns: dict: Informationen über den Rollback |
| save_datasetB | Speichert das Dataset dauerhaft in die GML/JSON-Datei. Übernimmt alle aktuellen Änderungen permanent in die Datei. Args: description: Beschreibung des Speicherns target_format: Optionales Zielformat ("gml" oder "json"). Wenn None, wird das ursprüngliche Format beibehalten. Returns: dict: Informationen über den Speichervorgang |
| get_dataset_historyB | Zeigt die Historie aller Snapshots und Speicherungen. Returns: dict: Übersicht über Snapshots, Speicherungen und aktuellen Zustand |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 19 tools
Most tools have distinct resource/action boundaries: dataset lifecycle, building CRUD, semantic enrichment, spatial analysis, and snapshot history are clearly separated. However, number_of_buildings and analyse_dataset overlap somewhat, and get_all_buildings/get_buiding_Id_list/get_building_by_id require reading descriptions to distinguish intent.
Tool names mostly follow a snake_case, verb-oriented pattern (list_datasets, load_dataset, create_building, remove_building_attributes). Minor deviations include the noun-only number_of_buildings and the typo/camelCase segment in get_buiding_Id_list.
At 19 tools, the set is borderline heavy for the domain. Most tools earn their place, but there is some redundancy around dataset/building summaries that could be consolidated.
The surface covers dataset loading, creation, filtering, saving, history, and building CRUD, enrichment, removal, and analysis. Minor gaps remain, such as no explicit delete/update dataset operation and no general building geometry update tool.