/ Directory / Playground / Cesium MCP
● Community gaopengbin 🔑 Needs your key

Cesium MCP

by gaopengbin · gaopengbin/cesium-mcp

Natural-language control over a CesiumJS 3D globe — fly the camera, drop entities, toggle layers, load 3D tiles, animate trajectories.

cesium-mcp lets an MCP client drive an existing CesiumJS viewer. 58 tools across 12 toolsets cover camera/view navigation, entities (markers, labels, models, polygons, polylines), layers (GeoJSON, basemaps), interaction (screenshots, highlight, measurement), and advanced features (3D Tiles, terrain, animation, trajectories, heatmaps, geolocation). Core 31 tools activate by default; set CESIUM_TOOLSETS=all for the full suite. Pair it with any app that embeds CesiumJS to get AI-driven geospatial visualization.

Why use it

Key features

Live Demo

What it looks like in practice

cesium-mcp.replay ▶ ready
0/0

Install

Pick your client

~/Library/Application Support/Claude/claude_desktop_config.json  · Windows: %APPDATA%\Claude\claude_desktop_config.json
{
  "mcpServers": {
    "cesium-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "cesium-mcp-runtime"
      ],
      "env": {
        "CESIUM_TOOLSETS": "all"
      }
    }
  }
}

Open Claude Desktop → Settings → Developer → Edit Config. Restart after saving.

~/.cursor/mcp.json · .cursor/mcp.json
{
  "mcpServers": {
    "cesium-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "cesium-mcp-runtime"
      ],
      "env": {
        "CESIUM_TOOLSETS": "all"
      }
    }
  }
}

Cursor uses the same mcpServers schema as Claude Desktop. Project config wins over global.

VS Code → Cline → MCP Servers → Edit
{
  "mcpServers": {
    "cesium-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "cesium-mcp-runtime"
      ],
      "env": {
        "CESIUM_TOOLSETS": "all"
      }
    }
  }
}

Click the MCP Servers icon in the Cline sidebar, then "Edit Configuration".

~/.codeium/windsurf/mcp_config.json
{
  "mcpServers": {
    "cesium-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "cesium-mcp-runtime"
      ],
      "env": {
        "CESIUM_TOOLSETS": "all"
      }
    }
  }
}

Same shape as Claude Desktop. Restart Windsurf to pick up changes.

~/.continue/config.json
{
  "mcpServers": [
    {
      "name": "cesium-mcp",
      "command": "npx",
      "args": [
        "-y",
        "cesium-mcp-runtime"
      ]
    }
  ]
}

Continue uses an array of server objects rather than a map.

~/.config/zed/settings.json
{
  "context_servers": {
    "cesium-mcp": {
      "command": {
        "path": "npx",
        "args": [
          "-y",
          "cesium-mcp-runtime"
        ]
      }
    }
  }
}

Add to context_servers. Zed hot-reloads on save.

claude mcp add cesium-mcp -- npx -y cesium-mcp-runtime

One-liner. Verify with claude mcp list. Remove with claude mcp remove.

Use Cases

Real-world ways to use Cesium MCP

Fly a location briefing on a live globe

👤 Ops, logistics, and planning teams ⏱ ~15 min intermediate

When to use: You want a live 3D briefing instead of static slides.

Prerequisites
  • A running CesiumJS viewer app — Embed Cesium in your app; expose the connector
  • Cesium Ion access token (if using Ion assets) — https://ion.cesium.com/tokens
Flow
  1. Fly to the site
    Fly to the Eiffel Tower and drop a red marker with the label 'Site A'.✓ Copied
    → Camera animates; marker appears with label
  2. Overlay data
    Load this GeoJSON of neighborhood boundaries as a translucent layer.✓ Copied
    → Layer visible and interactive
  3. Capture
    Take a screenshot I can paste in the slide.✓ Copied
    → PNG returned

Outcome: A live, linkable briefing view instead of a frozen image.

Pitfalls
  • Loading a huge GeoJSON without simplification — Simplify to reasonable vertex counts; Cesium can choke on million-vertex polygons
Combine with: filesystem

Animate a fleet's trajectory over time

👤 Operations and mobility teams ⏱ ~25 min intermediate

When to use: You have timestamped positions and want a playback on the globe.

Prerequisites
  • Time-coded position data — CSV or GeoJSON with timestamps
Flow
  1. Load entities with time
    Add 3 vehicle entities with their SampledPositionProperty tracks from fleet.csv.✓ Copied
    → Entities render; timeline shows the span
  2. Play
    Animate at 10x, camera follows vehicle A.✓ Copied
    → Smooth playback; camera locked to subject

Outcome: Interactive fleet playback without writing Cesium code.

Load a 3D Tiles dataset and inspect a single building

👤 Urban planning, AEC, BIM teams ⏱ ~20 min advanced

When to use: You've got a 3D Tiles tileset and want to query a feature.

Flow
  1. Load the tileset
    Load 3D Tiles at <URL>, orient terrain, set max screen-space error 16.✓ Copied
    → Tileset renders without depth-fighting
  2. Highlight + measure
    Highlight the building at picked entity; measure its height.✓ Copied
    → Building highlighted; height reported

Outcome: Quick interactive inspection for stakeholder review.

Pitfalls
  • Camera clipping through terrain — Enable depth testing against terrain; tune near/far clip

Overlay a heatmap of point data

👤 Analysts visualizing density ⏱ ~15 min intermediate

When to use: You need a heatmap on a map without an external plotting tool.

Flow
  1. Ingest points
    Import points.csv (lon, lat, weight).✓ Copied
    → Points loaded into a heatmap toolset
  2. Tune appearance
    Heatmap radius 25px, gradient viridis.✓ Copied
    → Styled overlay visible

Outcome: A defensible heatmap built into your globe.

Combine with: mcp-echarts

Combinations

Pair with other MCPs for X10 leverage

cesium-mcp + filesystem

Load local datasets (GeoJSON, CSV) and render on the globe

Open ./data/points.csv, import as a heatmap on the globe.✓ Copied
cesium-mcp + mcp-echarts

Pair the 3D globe with classic statistical charts

Cesium map of density + echarts histogram on the side — synced filters.✓ Copied
cesium-mcp + fetch

Pull live feeds (AIS, ADS-B) and animate

Fetch live vessel positions and update entities every 30s.✓ Copied

Tools

What this MCP exposes

ToolInputsWhen to callCost
camera.flyTo / lookAt / saveView / loadView coords / heading / pitch / roll Camera navigation 0
entities.add / update / remove geometry + styling Markers, labels, models, polygons, polylines 0
layers.add (GeoJSON / imagery) / toggle source + style Toggle or add geospatial layers bandwidth for remote sources
tiles3d.load / query tileset URL 3D Tiles rendering and feature picking 0
terrain.set terrain provider Swap terrain providers 0
animation.play / trajectory.load time interval / track Time-based playback 0
interaction.screenshot / highlight / measure area or picked entity Capture, select, and measure 0
heatmap.add points + radius + gradient Density visualization 0
geolocation.goto name or coords Named-place navigation 0

Cost & Limits

What this costs to run

API quota
None for the server itself; Cesium Ion tokens have their own quota if you use Ion assets
Tokens per call
Small ops; 3D Tiles / imagery bytes not in token count
Monetary
Free — Cesium is open source
Tip
Stick with the default 31 core tools unless you specifically need the extended set; simpler surface = fewer wrong turns.

Security

Permissions, secrets, blast radius

Credential storage: Cesium Ion token in env var if used.
Data egress: Fetches to imagery/terrain providers you configure (Ion, MapBox, custom tile servers).

Troubleshooting

Common errors and fixes

Camera jumps to space instead of the target

Check lat/lon order (Cesium uses lon, lat) and altitude values.

Verify: Log args passed to camera.flyTo
GeoJSON looks flat

Terrain sampling is off; enable clampToGround in the layer options.

Verify: Inspect the layer's styling options
Tileset black / missing

CORS blocks many tilesets; host or proxy with proper headers.

Verify: DevTools Network panel for the tileset URL

Alternatives

Cesium MCP vs others

AlternativeWhen to use it insteadTradeoff
google-maps2D maps and Places API are sufficientNo 3D globe or 3D Tiles
google-mapYou're already on Google Maps infraLess 3D-rich than Cesium
mcp-echartsYour data is statistical, not geospatialNo map context

More

Resources

📖 Read the official README on GitHub

🐙 Browse open issues

🔍 Browse all 400+ MCP servers and Skills