Skip to content

Releases: tum-gis/3dcitydb-mcp-server

v1.0.1

Choose a tag to compare

@thomashkolbe thomashkolbe released this 15 Oct 09:12

Patch release fixing the HTTP/SSE deployment for modern MCP clients.

Fix: 405 Method Not Allowed for modern MCP clients (VS Code, ...)

Modern MCP clients speak the Streamable HTTP transport: they POST to the
configured URL and only fall back to SSE if the endpoint answers 404. The
1.0.0 SSE server only accepted GET on /sse, so such clients got
405 Method Not Allowed and never connected.

  • New endpoint http://your-server:8080/mcp (Streamable HTTP transport),
    served by the same MCP server as the existing /sse endpoint. Both run in
    the same process; /sse and /health are unchanged.

  • Point VS Code (or any other modern client) at:

    {
      "mcpServers": {
        "3dcitydb": { "type": "http", "url": "http://localhost:8080/mcp/" }
      }
    }

No breaking changes; stdio and Gradio-UI deployments are unaffected.

v1.0.0

Choose a tag to compare

@thomashkolbe thomashkolbe released this 10 Oct 15:02

3D viewer for the Chat Assistant (new deployment option 3b)

The headline feature of this release: the Chat Assistant can now show your
city model in 3D and link the conversation to the viewer.

  • New deployment option 3b — Fullstack + 3D viewer. Layering
    docker-compose.fullstack.viz.yml on top of the fullstack stack embeds the
    3DCityDB Web Map Client (Cesium) into the Chat tab. The model is streamed as
    3D Tiles generated on demand by a citydb-3dtiler container; tick
    "Generate 3D tiles after import" or press Refresh 3D tiles at any time.
  • Answer highlighting. When an answer lists features, they are highlighted
    in the 3D view and the camera flies to them.
  • Viewer to chat selection. Toggle the selection mode in the viewer, click
    features (with a panel to pick the right level — a wall, its building, its
    siblings), and the chatbot receives the selection as a [VIEWER SELECTION]
    context block, so questions can say "these buildings" / "die ausgewählten
    Objekte".
  • New MCP tools for the viewer:
    • resolve_highlight_targets — expands feature ids to viewer-highlightable geometry plus a camera target
    • get_feature_tree — containment neighbourhood of a picked feature (ancestors, children, siblings)
    • describe_selection — summarizes a finished multi-feature selection
    • Only offered when the viewer is enabled (ENABLE_VIZ=true, option 3b); in non-viz deployments they stay out of the tool list entirely.
  • Viewer configuration via VIEWER_TERRAIN_* and VIEWER_WMS_* environment variables (defaults: basemap.de DGM5 terrain + WMS base map).

WebUI improvements

  • Live progress for system prompt re-assembly: per-step progress is streamed into an auto-growing status box; the button is disabled while running and the page no longer jumps (scroll position is preserved).
  • Re-assemble after import: the prompt rebuild after an import is deferred and offered via a popup when you switch to the System Prompt tab; the status line reports the full prompt size.
  • MCP Inspector now shows live server data: the server's self-description and the current tool list are read from the running MCP server, not hard-coded.
  • Stays on the Import tab after a successful import; fixed rebuild step counting; removed the Progress accordion on the System Prompt tab.

MCP server

  • assemble_prompt and run_query are listed first in list_tools(), so MCP clients (e.g. the MCP Inspector) present the two primary tools up top.

Fixes

  • Firefox 3D viewer crash fixed. Starting the Cesium viewer while its iframe is hidden (e.g. right after an import, while you are still on the Import tab) broke the render loop in Firefox ("An error occurred while rendering"). The viewer now starts — and tile reloads — only once the viewer tab is actually visible.
  • Stale highlights/camera no longer survive a tile reload; the start-view zoom now uses zoomToStartPosition.

Documentation

  • README: option 3b (3D viewer) in the deployment options, 3D Tiles streaming and citydb-3dtiler explained, viewer selection documented, corrected tab/settings descriptions, added LITELLM_TIMEOUT / LITELLM_TIMEOUT_LOCAL to the configuration reference.
  • .env.example documents the fullstack/BYOD variants and LLM provider options.

Version bump

MCP server, Python package, and Chat Assistant are now at v1.0.0.

Notes

  • The pre-built Docker image for option 3b is published as khaoulakanna1/citydb-mcp-agent:latest (single image; the viewer is included and activated via ENABLE_VIZ=true).

v0.3.4

Choose a tag to compare

@thomashkolbe thomashkolbe released this 20 Sep 15:43

MCP Server

  • Split the PostGIS function list in the prompt into dimension-independent functions (ST_GeometryType, ST_MakePoint, …) and 2D-only functions (ST_Intersects, ST_Area, …). The 2D list is now prepended with a warning that these functions likely give wrong results when applied to 3D geometries.
  • Removed the redundant supported_spatial_ops field from the DB context snapshot; the prompt's spatial function list is now the single source of truth.

Chatbot (Web UI)

  • The per-turn distilled "how the answer was found" story is now injected as a separate system message directly after the assistant answer it belongs to, clearly framed as an auto-generated, system-only block. This prevents the model from reading it as its own past output and imitating the "How I solved it" section in new answers.
  • Added a sanitizer that strips self-generated story sections from the chat history before they re-enter the context, and reworded output rule 7 to reference the new block format.

v0.3.3

Choose a tag to compare

@thomashkolbe thomashkolbe released this 19 Sep 20:32

Features

  • IFC import support (.ifc → CityGML 3.0 → 3DCityDB)
  • File upload support (CityGML, IFC, etc.) via the web browser. Uploaded files can then be imported into an empty 3DCityDB

Improvements

  • List closed qualifier value sets for flat measure properties in prompt assembly (resolve_properties + assemble_prompt)
  • Forbid internal working notes (story/reasoning) in final chat answers (RULE 7)
  • Tune Postgres for large datasets and expose MCP SSE endpoint (port 8080) in the fullstack compose file

Fixes

  • Fix null percentage calculation to include all value columns
  • Fix entrypoint CRLF on Windows builds
  • Fix a JSON DISTINCT bug in prompt assembly

v0.3.0

Choose a tag to compare

@thomashkolbe thomashkolbe released this 07 Sep 22:44

A significant release bringing separated versioning, a new version tool, and a large LLM-backend upgrade.

Separate MCP server & ChatBot versions

  • The MCP server version (pyproject.toml) and the ChatBot version (production/webui/__init__.py) are now tracked independently.
  • New get_server_version MCP tool lets any connected client query the running server's version.
  • The WebUI now shows both versions in the subtitle line and in the PDF export header.

LLM backend upgrades

  • Upgraded langchain-ollama to 0.3.x with exposed thinking levels.
  • Per-model LLM configuration, OpenAI reasoning effort, and Ollama endpoint discovery.
  • Added "max" thinking level for OpenAI-compatible endpoints.
  • Hardened the local ReAct agent for granite4.2 and other Ollama models.
  • Aligned OLLAMA_NUM_CTX fallback default with the README (32768 → 65536).

Documentation & prompting

  • Expanded the 3DCityDB v5 schema documentation in the system prompt.
  • README updates for thinking levels, local model support, and the new UI features, plus a paper citation and corrected configuration defaults.
  • WebUI headline reworded to "3DCityDB v5 MCP Server and Chatbot".

Install

pip install "git+https://github.com/tum-gis/3dcitydb-mcp-server.git@v0.3.0"

Note: not yet published to PyPI — the latest PyPI release remains 0.2.2.

v0.2.3

Choose a tag to compare

@thomashkolbe thomashkolbe released this 07 Sep 22:38

Release of the current main trunk. This tag pins the state of the code as of e3b0878.

What's new since v0.2.2

  • Country-aware codelists
  • CityJSON import support
  • WebUI improvements

Note: the latest release on PyPI is still 0.2.2. This v0.2.3 tag is not published to PyPI. pyproject.toml at this tag still reads 0.2.0 (the tag is a trunk pin, not a source bump).

Install

pip install "git+https://github.com/tum-gis/3dcitydb-mcp-server.git@v0.2.3"