普通视图

发现新文章,点击刷新页面。
昨天 — 2026年3月15日首页

让 AI 用自然语言操控三维地球 -- Cesium MCP 开源实践

作者 laogao
2026年3月15日 16:53

让 AI 用自然语言操控三维地球 -- Cesium MCP 开源实践

一句"飞到埃菲尔铁塔,加个红色标记",Claude/Copilot/Cursor 就能帮你在 CesiumJS 里完成操作。这是怎么做到的?

演示效果

先看效果,了解 cesium-mcp 能做什么:

demo-full.gif

演示中通过 AI 对话完成了相机飞行、添加标记、样式修改等操作。

背景:当 GIS 遇上 AI Agent

CesiumJS 是 WebGL 三维地球可视化的事实标准。但凡涉及地理信息系统(GIS)的 Web 项目——智慧城市、数字孪生、无人机航线规划——几乎绑定 CesiumJS。

问题是:Cesium API 体量庞大,光 Viewer 就有几十个配置项,Entity 系统更是嵌套层层。新人写个"在地图上加个点"都要翻半天文档。

2024 年底 Anthropic 推出了 MCP(Model Context Protocol),让 AI 智能体能以标准化方式调用外部工具。我们顺着这条路做了一件事:

把 CesiumJS 的能力通过 MCP 协议暴露出来,让任何 AI 智能体都能用自然语言操控三维地球。

这就是 cesium-mcp

它能做什么

整体架构

graph LR
    subgraph AI["AI 智能体"]
        A1["Claude Desktop"]
        A2["VS Code Copilot"]
        A3["Cursor"]
    end

    subgraph MCP_Server["cesium-mcp-runtime<br/>(Node.js MCP Server)"]
        R1["MCP stdio 接口"]
        R2["WebSocket Server"]
    end

    subgraph Browser["浏览器"]
        B1["cesium-mcp-bridge<br/>(SDK)"]
        C1["CesiumJS Viewer<br/>三维地球"]
    end

    A1 -->|"MCP 协议<br/>(stdio)"| R1
    A2 -->|"MCP 协议<br/>(stdio)"| R1
    A3 -->|"MCP 协议<br/>(stdio)"| R1
    R1 <--> R2
    R2 <-->|"WebSocket<br/>JSON-RPC"| B1
    B1 -->|"命令执行"| C1

    style AI fill:#e8f4f8,stroke:#2196F3,stroke-width:2px
    style MCP_Server fill:#fff3e0,stroke:#FF9800,stroke-width:2px
    style Browser fill:#e8f5e9,stroke:#4CAF50,stroke-width:2px

简单说就是三层:

  1. cesium-mcp-bridge(浏览器 SDK):嵌入你的 CesiumJS 应用,通过 WebSocket 接收命令并执行
  2. cesium-mcp-runtime(MCP Server):连接 AI 智能体和浏览器,暴露 19 个标准化工具
  3. cesium-mcp-dev(开发辅助 MCP Server):在 IDE 里让 AI 助手更懂 Cesium API

19 个工具,覆盖 GIS 核心场景

类别 工具 说明
相机 flyTo setView getView zoomToExtent 飞行定位、视角切换
图层 addGeoJsonLayer addHeatmap addMarker addLabel 数据叠加、热力图
图层管理 removeLayer setLayerVisibility listLayers updateLayerStyle 增删改查
三维数据 load3dTiles loadTerrain loadImageryService 3D Tiles、地形、影像服务
底图 setBasemap 天地图、ArcGIS、OSM 一键切换
交互 highlight screenshot 要素高亮、截图
动画 playTrajectory 沿路径播放轨迹动画

你对 AI 说"加载这个 GeoJSON,用渐变色渲染人口密度",它会自动调用 addGeoJsonLayer 并传入样式参数。

三分钟跑起来

第一步:浏览器嵌入 bridge

npm install cesium-mcp-bridge
import { CesiumMcpBridge } from 'cesium-mcp-bridge';

// viewer 是你已有的 Cesium.Viewer 实例
const bridge = new CesiumMcpBridge(viewer, { port: 9100 });
bridge.connect();

第二步:启动 MCP 运行时

npx cesium-mcp-runtime

第三步:接入 AI 智能体

以 Claude Desktop 为例,在配置文件中添加:

{
  "mcpServers": {
    "cesium": {
      "command": "npx",
      "args": ["-y", "cesium-mcp-runtime"]
    }
  }
}

VS Code Copilot 用户在 .vscode/mcp.json 中配置:

{
  "servers": {
    "cesium": {
      "command": "npx",
      "args": ["cesium-mcp-runtime"]
    }
  }
}

然后直接用自然语言下指令:

  • "飞到北京天安门,高度 1000 米"
  • "加载这个 3D Tiles 模型"
  • "画一条从上海到纽约的折线"
  • "截张图发我"

开发时也有 AI 加持

除了运行时操控,我们还做了 cesium-mcp-dev——专为 IDE AI 助手设计的 MCP 服务器:

graph LR
    subgraph IDE["IDE 环境"]
        D1["GitHub Copilot"]
        D2["Cursor AI"]
        D3["Claude Code"]
    end

    subgraph DevServer["cesium-mcp-dev<br/>(MCP Server)"]
        T1["cesium_api_lookup<br/>API 文档查询"]
        T2["cesium_code_gen<br/>代码生成"]
        T3["cesium_entity_builder<br/>Entity 构建器"]
    end

    subgraph Output["输出"]
        O1["API 签名 & 示例"]
        O2["TypeScript 代码片段"]
        O3["Entity 配置 JSON"]
    end

    D1 -->|"MCP stdio"| DevServer
    D2 -->|"MCP stdio"| DevServer
    D3 -->|"MCP stdio"| DevServer
    T1 --> O1
    T2 --> O2
    T3 --> O3

    style IDE fill:#f3e5f5,stroke:#9C27B0,stroke-width:2px
    style DevServer fill:#fff3e0,stroke:#FF9800,stroke-width:2px
    style Output fill:#e8f5e9,stroke:#4CAF50,stroke-width:2px

提供 3 个工具:

工具 功能
cesium_api_lookup 按类名/方法查 Cesium API 文档,覆盖 Viewer、Entity、Camera 等 12 个核心类
cesium_code_gen 自然语言生 Cesium 代码,内置 11 个常见场景模板
cesium_entity_builder 交互式构建 Entity 配置,支持 8 种类型(point/polygon/model 等)

配置方式和 runtime 完全一致:

{
  "servers": {
    "cesium-dev": {
      "command": "npx",
      "args": ["cesium-mcp-dev"]
    }
  }
}

这意味着你在 VS Code 里写 Cesium 代码时,Copilot 可以直接查 API、生成代码片段、构建 Entity 配置——再也不用频繁切到文档网站。

一次操控的完整流程

以"飞到北京天安门,加个红色标记"为例,看看数据是怎么流转的:

sequenceDiagram
    participant User as 用户
    participant AI as AI 智能体
    participant RT as cesium-mcp-runtime
    participant BR as cesium-mcp-bridge
    participant CS as CesiumJS

    User->>AI: "飞到北京天安门,加个红色标记"
    AI->>AI: 理解意图,拆解为两步

    rect rgb(232, 244, 248)
    Note over AI,CS: 第一步:飞行定位
    AI->>RT: MCP tool_call: flyTo({lon:116.39, lat:39.91, h:1000})
    RT->>BR: WebSocket JSON-RPC
    BR->>CS: viewer.camera.flyTo(...)
    CS-->>BR: 飞行完成
    BR-->>RT: result: success
    RT-->>AI: tool_result: "已飞行到目标位置"
    end

    rect rgb(232, 245, 233)
    Note over AI,CS: 第二步:添加标记
    AI->>RT: MCP tool_call: addMarker({lon:116.39, lat:39.91, color:"red"})
    RT->>BR: WebSocket JSON-RPC
    BR->>CS: viewer.entities.add(...)
    CS-->>BR: entity created
    BR-->>RT: result: {id: "marker-1"}
    RT-->>AI: tool_result: "已添加红色标记"
    end

    AI-->>User: "已飞到天安门并添加了红色标记"

AI 自动将自然语言拆解为多个工具调用,每个工具走完 MCP -> WebSocket -> CesiumJS 的完整链路,结果逐级回传。用户只需要说一句话。

技术实现要点

Bridge:命令注册与执行

cesium-mcp-bridge 的核心是一个命令注册表。每个 MCP 工具对应一个命令处理器,通过 CesiumBridge.execute() 分发:

const bridge = new CesiumBridge(viewer);
// 收到 WebSocket 消息后
const result = await bridge.execute({
  action: 'flyTo',
  params: { longitude: 116.4, latitude: 39.9, height: 1000 }
});

Bridge 不关心命令从哪来——WebSocket、HTTP、甚至手动调用都行。这种解耦使得 Bridge SDK 可以独立于 MCP 使用。

Runtime:双向通信

Runtime 同时充当 MCP stdio 服务器和 WebSocket 服务器。AI 智能体通过 MCP 协议发送工具调用,Runtime 把它翻译成 JSON-RPC 命令通过 WebSocket 推给浏览器,等待执行结果后回传给 AI。

支持多会话(session),同一个 Runtime 可以连接多个浏览器页面。

版本策略

主版本号.次版本号跟踪 CesiumJS(1.139.x 对应 Cesium ~1.139.0),补丁版本独立迭代 MCP 功能。这样用户一看版本号就知道兼容哪个 Cesium。

已上架平台

平台 状态
npm Registry cesium-mcp-bridge / cesium-mcp-runtime / cesium-mcp-dev v1.139.2
MCP Official Registry io.github.gaopengbin/cesium-mcp-runtime / cesium-mcp-dev
Smithery runtime(19 tools)/ dev(3 tools)
awesome-mcp-servers PR 已提交

适用场景

  • 快速原型:用自然语言几分钟搭出 GIS 可视化 demo
  • 非开发人员:分析师、项目经理可以直接对 AI 说需求,AI 在 Cesium 上渲染结果
  • 教学演示:课堂上让学生用自然语言探索地理数据
  • 自动化流水线:CI/CD 中自动截图、自动验证地图渲染
  • 智慧城市/数字孪生:AI Agent 作为交互层,终端用户通过对话操控三维场景

参与贡献

项目完全开源(MIT),欢迎参与:

git clone https://github.com/gaopengbin/cesium-mcp.git
cd cesium-mcp
npm install
npm run build
npm test

GitHub: github.com/gaopengbin/… 官方文档: gaopengbin.github.io/cesium-mcp


如果你也在做 GIS + AI 的事情,欢迎交流。有问题直接在 GitHub Issues 提,我们会及时回复。

❌
❌