OpenLayers MCP
AI-Powered Map Control via Model Context Protocol for OpenLayers
Connect any MCP-compatible AI agent to OpenLayers — view, layers, features, styles, drawing, all through natural language.
中文文档
______________________________________________________________________
建筑
+----------------+ stdio +--------------------+ WebSocket +--------------------+
| AI Agent | | openlayers-mcp- | | openlayers-mcp- |
| (Claude, | MCP | runtime | JSON-RPC | bridge |
| Cursor...) | | (Node.js) | 2.0 | (Browser) |
+----------------+ +--------------------+ +--------------------+
|
+------v------+
| OpenLayers |
| Map |
+-------------+包裹
| 包装 | 描述 |
|---|---|
| openlayers-mcp运行时 | MCP服务器(stdio)——7个工具集中有30多个工具,WebSocket桥接到浏览器 |
| 开放层mcp桥 | 浏览器SDK——通过WebSocket接收命令并控制OpenLayers映射 |
快速开始
1.安装和构建
git clone https://github.com/gaopengbin/openlayers-mcp.git
cd openlayers-mcp
npm install
npm run build2.启动MCP运行时
npx openlayers-mcp-runtime
# => HTTP + WebSocket server on http://localhost:9300
# => MCP Server running (stdio), 30+ tools registered3.连接浏览器
打开 examples/minimal/index.html 在浏览器中。桥自动连接到 ws://localhost:9300.
或者将桥集成到您自己的应用程序中:
import { OpenLayersBridge } from 'openlayers-mcp-bridge'
import Map from 'ol/Map'
import View from 'ol/View'
import TileLayer from 'ol/layer/Tile'
import OSM from 'ol/source/OSM'
const map = new Map({
target: 'map',
layers: [new TileLayer({ source: new OSM() })],
view: new View({ center: [0, 0], zoom: 2 })
})
const bridge = new OpenLayersBridge(map)
bridge.connect('ws://localhost:9300')4.连接AI代理
添加到您的MCP客户端配置(Claude Desktop、Cursor等):
{
"mcpServers": {
"openlayers": {
"command": "npx",
"args": ["-y", "openlayers-mcp-runtime"]
}
}
}现在问你的AI: *“显示巴黎地图,并在卢浮宫周围添加一个多边形”*
用法示例
问你的AI代理自然语言问题,比如:
- “以变焦级别12飞往东京”
- “从该GeoJSON URL添加矢量层”
- 在地图上绘制一个多边形,然后将其导出为GeoJSON
- “将图层不透明度设置为50%”
- “在埃菲尔铁塔上添加一个带有弹出标签的标记”
- “截取当前地图视图的屏幕截图”
30+可用工具
工具被组织成 7套工具默认模式启用4个核心工具集。使用 list_toolsets 和 enable_toolset 以动态激活更多。
| 工具集 | 工具 | 默认值 |
|---|---|---|
| 视图 | flyTo, setView, getView, fitExtent, zoomIn, zoomOut | 是的 |
| 层 | addTileLayer, addVectorLayer, removeLayer, listLayers, setLayerVisibility, setLayerOpacity, setLayerZIndex | 是的 |
| 特征 | addFeature, addGeoJSON, removeFeature, updateFeature, listFeatures | 是的 |
| 互动 | screenshot, getFeatureAtPixel, getFeaturesInExtent | 是的 |
| 叠加 | addOverlay, removeOverlay, updateOverlay, listOverlays | 没有 |
| 风格 | setFeatureStyle, setLayerStyle | 没有 |
| 画 | enableDraw, disableDraw, getDrawnFeatures | 没有 |
元工具(始终可用)
| 工具 | 说明 |
|---|---|
list_toolsets | 列出所有可用的工具集及其启用状态 |
enable_toolset | 启用工具集以注册其工具 |
为什么选择OpenLayers?
- 真正的开源 -BSD 2条款,基本用法不需要API密钥
- 投影支持 --本地EPSG:4326、EPSG:3857和自定义CRS
- 庞大的生态系统 --WMS、WMTS、WFS、GeoJSON、KML、GeoTIFF、MVT等
- 成熟稳定 --超过15年的发展历程,被全球政府和企业所采用
环境变量
| 变量 | 默认值 | 描述 |
|---|---|---|
OL_MCP_PORT | 9300 | WebSocket服务器端口 |
OL_TOOLSETS | view,layer,feature,interaction | 逗号分隔的默认工具集 |
相关项目
许可证
麻省理工学院
