地理空间可视化服务器

一个通用的模型上下文协议(MCP)服务器,用于渲染地图、GeoJSON图层、边界框和地形覆盖层,适用于地理空间数据可视化和分析。

  • by chrishayuk
  • Python
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 chrishayuk/chuk-mcp-map

使用说明

楚科奇MCP地图

交互式地理空间可视化MCP服务器 --用于渲染地图、GeoJSON层、边界框和地形覆盖的通用模型上下文协议(MCP)服务器。

这是一个为学习和测试目的而提供的演示项目。

特性

此MCP服务器提供4个工具,用于从GeoJSON数据、图像叠加和图块层创建交互式地图视图。

所有工具都返回完全类型化的Pydantic v2模型 (MapContent / LayersContent)用于类型安全和验证。

智能自动弹出窗口:当特征具有属性(例如名称、温度、描述)时,会自动生成可点击的弹出窗口——不需要明确的弹出配置。内部钥匙(_id, fid, objectid等)被过滤掉,字段按优先级排序(名称、描述、类型优先),当名称和类型/类别都存在时,会生成“伦敦-纪念碑”等复合标题。

图层类型

类型 描述 用例
GeoJSON (默认) 具有样式和弹出窗口的点、线、多边形 特征集合、搜索结果、边界
影像合成 按地理边界定位的光栅图像 卫星缩略图、热图、历史地图
瓦片图层 XYZ图块URL模板 自定义底图、高程图块、天气层

工具

# 工具 返回 描述
1 show_map MapContent 最适合丰富的地图——样式、聚类、弹出窗口、多层、图像/平铺
2 show_geojson MapContent 快速单层地图——传递原始GeoJSON,自动生成弹出窗口
3 show_bbox MapContent 突出显示地图上的边界框
4 show_layers LayersContent 带有切换的简单多层地图(无样式或弹出窗口)

安装

使用紫外线(推荐)

# Install from PyPI
uv pip install chuk-mcp-map

# Or clone and install from source
git clone https://github.com/chrishayuk/chuk-mcp-map.git
cd chuk-mcp-map
uv sync --dev

使用pip

pip install chuk-mcp-map

用法

使用克劳德桌面

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json 视窗: %APPDATA%/Claude/claude_desktop_config.json

{
  "mcpServers": {
    "map": {
      "command": "uvx",
      "args": ["chuk-mcp-map"]
    }
  }
}

或者,如果在本地安装:

{
  "mcpServers": {
    "map": {
      "command": "chuk-mcp-map"
    }
  }
}

独立

# STDIO mode (default, for MCP clients)
uv run chuk-mcp-map

# HTTP mode (for web access)
uv run chuk-mcp-map http

查询示例

配置后,您可以向Claude提出以下问题:

  • “给我看一张世界十大首都的地图”
  • “在地图上标出这些地震位置”
  • “在地图上突出显示英国的边界框”
  • “在地图上显示此API响应的GeoJSON”
  • “用缩略图覆盖这些卫星足迹”

工具参考

1. show_map --丰富的交互式地图

当您需要可点击的弹出窗口、样式标记、聚类、多层或图像/图块覆盖时,这是最好的工具。将数据放入GeoJSON功能属性中,弹出窗口将自动生成(或提供显式的弹出模板进行控制)。

参数:

参数 类型 默认值 说明
layers str(JSON) 必需的 JSON层定义数组(见下文)
basemap str "osm" 基础瓷砖: osm, satellite, terrain, dark
center_lat float auto 地图中心纬度(从特征中自动检测)
center_lon float auto 地图中心经度(从特征中自动检测)
zoom int auto 缩放级别1--15(根据范围自动计算)

图层定义(GeoJSON):

{
  "id": "cities",
  "label": "UK Weather",
  "features": {
    "type": "FeatureCollection",
    "features": [{
      "type": "Feature",
      "geometry": { "type": "Point", "coordinates": [-0.12, 51.5] },
      "properties": { "name": "London", "temp": "12°C", "conditions": "Overcast", "wind": "18 km/h" }
    }]
  },
  "style": { "fillColor": "#3388ff", "fillOpacity": 0.4, "color": "#0044cc", "weight": 2 },
  "cluster": true
}

弹出窗口为 自动生成 从特征属性中——单击标记显示名称、温度、条件和风。要自定义,请添加显式 popup 字段: {"title": "{name}", "fields": ["temp", "conditions"]}.

图层定义(图像叠加):

{
  "id": "thumbnail",
  "label": "Satellite Thumbnail",
  "layer_type": "image",
  "image_url": "https://example.com/thumb.jpg",
  "image_bounds": [[south_lat, west_lon], [north_lat, east_lon]],
  "opacity": 0.9,
  "visible": false
}

图层定义(平铺图层):

{
  "id": "topo",
  "label": "USGS Topo",
  "layer_type": "tiles",
  "tile_url": "https://basemap.nationalmap.gov/arcgis/rest/services/USGSTopo/MapServer/tile/{z}/{y}/{x}",
  "tile_attribution": "USGS The National Map",
  "tile_min_zoom": 0,
  "tile_max_zoom": 16
}

2. show_geojson --快速单层地图

获取地图的最快方法是传递原始GeoJSON,一切都是自动配置的。自动根据功能属性生成可点击的弹出窗口。使用 show_map 用于完全控制样式、集群和弹出模板。

参数:

参数 类型 默认值 说明
geojson str 必需的 GeoJSON字符串(FeatureCollection、Feature或裸几何体)
label str "Features" 图例中显示的图层名称
basemap str "osm" 基础瓷砖: osm, satellite, terrain, dark
fill_color str -- 多边形/圆形填充颜色(十六进制)
stroke_color str -- 线条/多边形笔划颜色(十六进制)
cluster bool的。 false 聚类点标记

3. show_bbox --边界框图

将边界框显示为高亮显示的多边形。可用于显示搜索范围或光栅覆盖范围。

参数:

参数 类型 默认值 说明
west 浮子 必需的 西经(十进制度数,WGS84)
south 浮子 必需的 南纬
east 浮子 必需的 东经
north 浮子 必需的 北纬
label str "Area" 图例中的图层标签
basemap str "osm" 基础瓷砖
fill_color str "#3388ff" 多边形填充颜色(十六进制)

4. show_layers --轻量级多层

简化的多层概览,无需每层样式或弹出窗口。使用 show_map 当你需要造型和交互性时。

参数:

参数 类型 默认值 说明
layers str(JSON) 必需的 JSON数组 {id, label, features} 物体
title str -- 可选地图标题
basemap str "osm" 基础瓷砖
center_lat float auto 地图中心纬度
center_lon float auto 地图中心经度
zoom int auto 缩放级别1--15

建筑

src/chuk_mcp_map/
    __init__.py        # Package version
    server.py          # MCP server, 4 tool handlers, CLI entry point
    helpers.py         # GeoJSON parsing, bbox, centre/zoom, layer builders

建在上面 chuk mcp服务器 从观点 chuk视图模式:

  • 装饰器: @map_tool 和 @layers_tool 从 chuk_view_schemas.chuk_mcp
  • 返回类型: MapContent 和 LayersContent (Pydantic v2型号)
  • 运输:STDIO(MCP客户端的默认设置)或HTTP(--http 旗帜)
  • 无地理依赖性:纯Python GeoJSON处理——无GDAL、shapley或rasterio

被...使用 舒克·麦克普斯塔, chuk mcp dem,以及需要地图UI的任何其他服务器。

发展

设置

# Clone the repository
git clone https://github.com/chrishayuk/chuk-mcp-map.git
cd chuk-mcp-map

# Install with uv (recommended)
uv sync --dev

# Or with pip
pip install -e ".[dev]"

运行测试

make test              # Run 158 tests
make test-cov          # Run tests with coverage
make coverage-report   # Show coverage report

代码质量

make lint      # Run linters
make format    # Auto-format code
make typecheck # Run type checking
make security  # Run security checks
make check     # Run all checks (lint, typecheck, security, test)

建筑

make build         # Build package
make docker-build  # Build Docker image
make docker-run    # Run Docker container

贡献

欢迎投稿!请随时提交拉取请求。

  1. 分叉存储库
  2. 创建功能分支(git checkout -b feature/amazing-feature)
  3. 提交您的更改(git commit -m 'Add amazing feature')
  4. 推到分支(git push origin feature/amazing-feature)
  5. 打开拉取请求

许可证

Apache许可证2.0——请参阅 许可证 了解详情。

致谢