Skip to main content
Glama
HamerCode

CityDPC-MCP

by HamerCode

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
MCP_DATASET_DIRNoDirectory 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

CapabilityDetails
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

NameDescription
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

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

TDQS

A3.5/5.0

Scored across 19 tools

Disambiguation4/5

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.

Naming Consistency4/5

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.

Tool Count3/5

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.

Completeness4/5

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.

Maintenance

ActivityMaintained
ResponsivenessNo issues