Cesium MCP Servers for AI Workflows - Your Input Needed

We’re exploring the development of shared MCP servers for the Cesium community that enable AI-powered geospatial workflows through the Model Context Protocol (MCP) and would love to hear your thoughts on whether this would be valuable for your workflow.

Example Potential Workflows:
Imagine being able to interact with Cesium through natural language commands like:

  • “Fly to the Eiffel Tower and zoom to 500 meters altitude”

  • “Find parcels within 800m of light rail with slope less than 15%”

  • “Identify hospitals within 10km of earthquake epicenter with evacuation routes”

  • “Add markers for all major airports in California”

  • “Create a flight path animation from Paris to London with a 30-second duration”

  • “Find the nearest parks and draw a 5km radius around each”

Would this be useful for your workflow? We’d appreciate any feedback on:

  • What Cesium/geospatial capabilities would you want to control through natural language commands?

  • What geospatial or visualization workflows would benefit most from conversational AI interaction?

  • What specific features or APIs would be most valuable to expose through shared MCP servers for the community?

  • Have you already tried creating Cesium-specific agents or agentic workflows in your product? What worked well or what challenges did you face?

  • What shared MCP servers would be most beneficial for the Cesium community to have available?

Looking forward to hearing your thoughts and learning about your use cases!

walking_man

2 Likes

:100:

We’re building an interface for our live data viewed in Cesium, so MCP would cut out a ton of work for us by automating the repositioning in ideal ways. Yes please!

1 Like

Thanks @turbobeest for the response.

What kind of capabilities are you looking for in Cesium MCP? Is it camera control MCP that allows to fly to specific location? What other features would be useful?

we have use case of already developed Jakarta Digital Twin Ciy using Unreal for immersive interactivity, but also using Cesium to align with geospatial location, integrated with parcel, landuse, transportation network, new building/infrastructure etc then put them into the Digital Twin. so this LLM interactive will be displayed with super realistic 3D wit multi view, multi data information, etc. hope can be part of this first mover soon

1 Like

This would be awesome. I can think of a couple workflows right now that would be of high interest:

1). Prompt: “Show the world from a camera view defined by lat/lon/elevation, oriented towards X, with photorealistic tiles. Then take a snapshot and save it as a jpg.” Daisy chain that to an image model, and prompt “Modify this jpg to add (whatever), or highlight any instances of (whatever) in the image.”

2). Prompt to an image model: “Generate an image showing X at a given location from a top-down view.” Then daisy chain to Cesium MCP: “Take this image, drape it over 3D terrain, and display the result from a camera view defined by lat/lon/elevation, oriented towards X.”

3). Mixed prompt / challenge case: “Show me the world from a camera view defined by lat/lon/elevation, oriented toward X, using photorealistic tiles at Time T. Repeat this across varying lat/lon/elevation and time values, and compare each view against a corresponding series of real images captured from those locations and times. Highlight where the images are LEAST consistent with the tiles over time.”

In general, the ability to work with camera view and imagery would be hugely helpful. I could also see a great use case for being able to take images and add them as linked metadata to either terrain tiles, or entities, for easy retrieval later.

1 Like

This would be very useful for our workflow. We build and operate web-based industrial digital twins (EPC/EPCM + O&M) where the core problem is keeping space + time + evidence aligned: what was designed (3D/BIM), what was planned (schedule/WBS), and what is actually happening (drone captures, photogrammetry/LiDAR, QA/HSE evidence).

1) Cesium/geospatial capabilities we’d want to control via natural language

Scene & camera

  • “Fly to Asset X / Area Y and set view to 200m AGL, north-up, 35° tilt”

  • “Create a saved viewpoint / tour step and name it ‘Week 12 – North Pipe Rack’”

Layer / asset visibility

  • Toggle 3D Tilesets, imagery, terrain, point clouds, IFC-derived layers, “show only discipline = piping”

  • “Hide everything except assets tagged ‘critical’ and this week’s work packages”

Time / 4D controls

  • “Set timeline to Week 14 and play a 20s timelapse of Weeks 10–14”

  • “Color entities by Planned vs Real vs Forecast week” (time-phased styling)

Measurements & QA

  • “Measure distance/clearance between these two points/objects”

  • “Compute cut/fill or volume for this stockpile / excavation polygon”

  • “Create a section/clipping plane at Station 3+250 and export snapshot”

Annotations & evidence linking

  • “Add an issue marker here: ‘missing insulation’, attach these photos/videos, assign to QA”

  • “Generate a report view: screenshot + camera params + layers + time + linked evidence”

2) Workflows that benefit most from conversational AI in Cesium

A) Field-to-office evidence workflows

  • Turn raw captures into actionable views quickly:

    • “Load last week’s drone dataset, align to the model, highlight changes, create a shareable link”

    • “Show all open issues within 50m of this equipment and list the latest evidence”

B) Progress / schedule intelligence (4D)

  • “Show areas where Real Week lags Planned Week by >1”

  • “Explain why Area X is delayed: missing prerequisites, blocked access, or missing evidence”

C) O&M / integrity workflows

  • “Find assets with repeated anomalies in the last 3 inspections”

  • “Show nearest access routes / safe approach areas around a hazard polygon”

3) Features/APIs most valuable to expose via shared MCP servers

If you’re building shared community MCP servers, the most valuable ones (for us) would be:

Cesium Viewer control server

  • Camera, timeline, layer toggles, styling (3D Tiles styling), selection/query, screenshots/scene state export.

CZML/Time-dynamic authoring server

  • Generate and validate CZML for:

    • time-phased coloring, issue markers, flights/paths, timelapses, work-package overlays.
  • “Given WBS + week ranges, output CZML + legend + filters.”

Spatial analytics server (PostGIS-like)

  • Buffers, nearest features, intersects/within, corridor queries (pipelines/roads), slope/elevation stats, volume from surfaces.

  • Deterministic outputs + provenance (inputs, SRID, tolerances).

Ion asset management server

  • Create/update assets, upload pipelines, retrieve metadata, versioning, permissions, and publish states.

BIM/IFC metadata query server

  • “Select objects where system=‘Firewater’ and diameter>6in, then highlight and list IDs”

  • Link BIM IDs ↔ evidence ↔ issues ↔ schedule items.

4) Have we tried Cesium-specific agents/workflows? What worked and what was hard?

We’ve experimented with “assistant-driven” scene actions. What works:

  • Fast view building: camera moves, layer toggles, saved viewpoints, basic styling.

  • Guided workflows: step-by-step “confirm before applying” actions.

Challenges:

  • Ambiguity & safety: NL needs guardrails (“Do you mean Area polygon A or Asset group A?”)

  • Reproducibility: we need an audit trail: tool calls, parameters, timestamps, dataset versions.

  • Units / CRS: SRID, meters/feet, height references (ellipsoid vs terrain) must be explicit.

  • Performance: large industrial tilesets require staged/async operations and progress reporting.

5) Which shared MCP servers would be most beneficial for the Cesium community?

Top picks:

  1. Viewer/Scene Control MCP (camera/timeline/layers/styling/query/snapshot/scene-state)

  2. CZML Authoring MCP (time-dynamic overlays, validation, best-practice templates)

  3. Spatial Analytics MCP (buffer/nearest/intersects/slope/volume/corridor)

  4. Ion Asset Ops MCP (upload/version/metadata/permissions)

  5. BIM/IFC Query MCP (object selection + metadata filters + highlighting)

One suggestion: design tools to be deterministic (same inputs → same outputs) and return not only results but also “explainability artifacts” (parameters, assumptions, CRS/units, and a “replayable script” of actions).

Happy to share specific command examples and tool schemas if helpful.

1 Like

Great workflows! Thanks for sharing.

@galensonet Thanks for the detailed answers! You mentioned experimenting with assistant-driven scene actions. Did you use the Model Context Protocol (MCP) or a different approach (e.g., LangChain) for your agentic workflows?

If possible, could you share command examples and tool schemas you used?

Thanks!

Context / what IngeIA is: IngeIA is our web-based platform for industrial project delivery and operations (EPC/EPCM + O&M) that unifies a 3D digital twin (BIM/IFC → 3D Tiles) with a 4D weekly schedule model (WBS-based Planned/Real/Forecast weeks) and field evidence from reality capture (drone photos, 360 imagery, videos + SRT, orthomosaics, point clouds, textured meshes). The goal is to turn “3D visualization” into an operational system where every spatial element (area polygon or BIM asset) is directly linked to work packages, progress status, and verifiable evidence—with time-dynamic overlays (often via CZML) and auditable interactions.

To clarify: in our experiments we did not use MCP yet. We implemented assistant-driven scene actions using LLM tool-calling (function calling) with a small orchestrator (we tested both a minimal in-house router and LangChain-style agents). The tools drove a CesiumJS viewer plus our own services for:

  • WBS / weekly time-phased progress (Planned Week / Real Week / Forecast Week)

  • Industrial BIM/IFC-derived 3D Tiles

  • Areas as polygons (workfaces/areas)

  • Evidence (drone photos, 360, videos + SRT, orthos, point clouds, textured meshes)

  • Issues/QA observations linked to assets/areas/WBS

  • Cesium ion asset operations (upload/version/metadata)

We’re evaluating MCP now because it looks like the right abstraction for reusable “community servers” (viewer control, CZML authoring, spatial analytics, ion ops).

Below are IngeIA-like command examples and the tool schemas we used (simplified but representative).


1) Natural language → tool calls (IngeIA-style)

Example A — “Week view” in a workface with evidence overlay

User: “Go to Area A3, set Week 2026-W14, show only planned vs real coloring, and load last week’s drone evidence.”

[
  {
    "tool": "viewer.flyTo",
    "args": {
      "target": { "type": "area", "id": "area_A3" },
      "heightMeters": 220,
      "headingDeg": 15,
      "pitchDeg": -35,
      "durationSec": 1.4
    }
  },
  {
    "tool": "timeline.setWeek",
    "args": { "weekLabel": "2026-W14" }
  },
  {
    "tool": "wbs.getWeekState",
    "args": {
      "projectId": "proj_demo",
      "weekLabel": "2026-W14",
      "scope": { "areaId": "area_A3" }
    }
  },
  {
    "tool": "czml.generateProgressOverlay",
    "args": {
      "weekLabel": "2026-W14",
      "mode": "planned_vs_real",
      "scope": { "areaId": "area_A3" },
      "inputsRef": "wbs.getWeekState#last"
    }
  },
  {
    "tool": "viewer.loadCzml",
    "args": { "czmlRef": "czml.generateProgressOverlay#last", "layerId": "overlay_progress" }
  },
  {
    "tool": "evidence.query",
    "args": {
      "projectId": "proj_demo",
      "time": { "weekLabel": "2026-W13" },
      "scope": { "areaId": "area_A3" },
      "types": ["photo", "photo360", "video", "ortho", "pointcloud", "mesh"],
      "limit": 200
    }
  },
  {
    "tool": "viewer.addEvidencePins",
    "args": {
      "evidenceRef": "evidence.query#last",
      "groupBy": "type",
      "pinStyle": "compact",
      "onClick": { "open": "evidenceDrawer" }
    }
  }
]

What mattered for us:

  • The assistant doesn’t “invent” progress; it calls wbs.getWeekState.

  • The viewer overlay is CZML time-dynamic, so it’s replayable and auditable.


Example B — Click an asset (IFC) → “show everything related”

User: “Highlight this asset, show its WBS tasks for the current week, and list the latest evidence nearby.”

[
  {
    "tool": "bim.getSelection",
    "args": { "source": "viewer" }
  },
  {
    "tool": "wbs.findByBimIds",
    "args": {
      "projectId": "proj_demo",
      "bimIds": "bim.getSelection#ids",
      "weekLabel": "timeline.currentWeek"
    }
  },
  {
    "tool": "viewer.highlightBimObjects",
    "args": { "bimIds": "bim.getSelection#ids", "style": "outlineGlow" }
  },
  {
    "tool": "evidence.query",
    "args": {
      "projectId": "proj_demo",
      "scope": { "bimIds": "bim.getSelection#ids" },
      "spatial": { "type": "near", "radiusMeters": 35 },
      "time": { "range": "last_14_days" },
      "types": ["photo", "photo360", "video"],
      "limit": 80
    }
  },
  {
    "tool": "ui.openPanel",
    "args": {
      "panel": "AssetContext",
      "data": {
        "asset": "bim.getSelection#meta",
        "tasks": "wbs.findByBimIds#last",
        "evidence": "evidence.query#last"
      }
    }
  }
]

This pattern (selection → tasks → evidence) is core for “3D that is actually operational”.


Example C — “Explain delay” with hard constraints + provenance

User: “Why is Area A3 delayed this week?”

[
  {
    "tool": "wbs.getWeekKpis",
    "args": { "projectId": "proj_demo", "weekLabel": "2026-W14", "scope": { "areaId": "area_A3" } }
  },
  {
    "tool": "wbs.getBlockingReasons",
    "args": { "projectId": "proj_demo", "weekLabel": "2026-W14", "areaId": "area_A3" }
  },
  {
    "tool": "evidence.healthCheck",
    "args": { "projectId": "proj_demo", "weekLabel": "2026-W14", "scope": { "areaId": "area_A3" } }
  }
]

The LLM only summarizes these deterministic outputs and links back to a filtered view (“show me the tasks in A3, Week 14”).


2) Tool schemas (adapted to our real primitives)

Viewer control (CesiumJS)

{
  "name": "viewer.flyTo",
  "description": "Move camera to an Area polygon, BIM asset, or coordinate with explicit height/orientation.",
  "inputSchema": {
    "type": "object",
    "required": ["target", "heightMeters"],
    "properties": {
      "target": {
        "type": "object",
        "required": ["type"],
        "properties": {
          "type": { "type": "string", "enum": ["area", "asset", "coordinate"] },
          "id": { "type": "string" },
          "cartographicDeg": {
            "type": "object",
            "properties": {
              "lon": { "type": "number" },
              "lat": { "type": "number" },
              "height": { "type": "number" }
            }
          }
        }
      },
      "heightMeters": { "type": "number" },
      "headingDeg": { "type": "number", "default": 0 },
      "pitchDeg": { "type": "number", "default": -35 },
      "rollDeg": { "type": "number", "default": 0 },
      "durationSec": { "type": "number", "default": 1.2 }
    }
  }
}

Timeline / week semantics (4D)

{
  "name": "timeline.setWeek",
  "description": "Set current 4D time to a week label used by the schedule (time-phased weekly model).",
  "inputSchema": {
    "type": "object",
    "required": ["weekLabel"],
    "properties": {
      "weekLabel": { "type": "string", "description": "e.g., 2026-W14" }
    }
  }
}

WBS / time-phased progress

{
  "name": "wbs.getWeekState",
  "description": "Return tasks/work packages in scope with Planned/Real/Forecast weeks and statuses for the requested week.",
  "inputSchema": {
    "type": "object",
    "required": ["projectId", "weekLabel"],
    "properties": {
      "projectId": { "type": "string" },
      "weekLabel": { "type": "string" },
      "scope": {
        "type": "object",
        "properties": {
          "areaId": { "type": "string" },
          "discipline": { "type": "string" },
          "wbsPrefix": { "type": "string" },
          "bimIds": { "type": "array", "items": { "type": "string" } }
        }
      }
    }
  }
}

CZML authoring (time-dynamic overlays)

{
  "name": "czml.generateProgressOverlay",
  "description": "Generate CZML overlays to visualize progress for a given week (planned vs real vs forecast; status heatmaps).",
  "inputSchema": {
    "type": "object",
    "required": ["weekLabel", "mode", "scope"],
    "properties": {
      "weekLabel": { "type": "string" },
      "mode": {
        "type": "string",
        "enum": ["planned_vs_real", "forecast", "status", "delta_heatmap"]
      },
      "scope": {
        "type": "object",
        "properties": {
          "areaId": { "type": "string" },
          "discipline": { "type": "string" },
          "wbsPrefix": { "type": "string" }
        }
      },
      "inputsRef": { "type": "string", "description": "Reference to deterministic WBS output (for provenance)." }
    }
  }
}

Evidence query (drone reality capture)

{
  "name": "evidence.query",
  "description": "Query evidence objects (photos, 360, videos+SRT, orthos, point clouds, meshes) by time + spatial scope.",
  "inputSchema": {
    "type": "object",
    "required": ["projectId"],
    "properties": {
      "projectId": { "type": "string" },
      "types": {
        "type": "array",
        "items": { "type": "string", "enum": ["photo", "photo360", "video", "ortho", "pointcloud", "mesh"] }
      },
      "time": {
        "type": "object",
        "properties": {
          "weekLabel": { "type": "string" },
          "range": { "type": "string", "enum": ["last_7_days", "last_14_days", "custom"] },
          "startIso": { "type": "string" },
          "endIso": { "type": "string" }
        }
      },
      "scope": {
        "type": "object",
        "properties": {
          "areaId": { "type": "string" },
          "bimIds": { "type": "array", "items": { "type": "string" } }
        }
      },
      "spatial": {
        "type": "object",
        "properties": {
          "type": { "type": "string", "enum": ["near", "withinPolygon"] },
          "radiusMeters": { "type": "number" }
        }
      },
      "limit": { "type": "integer", "default": 200 }
    }
  }
}

Cesium ion operations (high-level)

{
  "name": "ion.assets.publishVersion",
  "description": "Publish a new version of an ion asset (orthos/tiles/point clouds) with metadata and provenance.",
  "inputSchema": {
    "type": "object",
    "required": ["assetId", "versionTag"],
    "properties": {
      "assetId": { "type": "string" },
      "versionTag": { "type": "string" },
      "metadata": { "type": "object" },
      "provenance": {
        "type": "object",
        "properties": {
          "sourceDatasetId": { "type": "string" },
          "processingPipeline": { "type": "string" }
        }
      }
    }
  }
}


3) What we’d love MCP to standardize (based on this experience)

  • Deterministic tools + provenance: WBS outputs, CRS/units, dataset versions, and “replayable” sequences.

  • Confirm-before-apply patterns for expensive actions (loading huge assets, generating large CZML, mass styling).

  • Standard viewer control capabilities (camera/timeline/layers/query/snapshot/state export).

  • Shared CZML authoring server with best-practice templates for time-phased industrial workflows.

If it’s useful, we can also share how we represent areas (polygons), week labeling, and the “link-back” UX pattern (3D overlay click → filtered WBS view → evidence drawer) in a way that is reusable for the community.