关于 GIS MCP Server
GIS MCP Server 是一个开源 MCP 服务,将 LLM 与 GIS 及地理空间操作相连,供 AI 助手执行空间分析与坐标转换。项目基于 Shapely、GeoPandas、PyProj、Rasterio 等 Python GIS 库,提供 92 个以上工具。
主要功能
- 0192 个以上 GIS 工具,覆盖多个 Python 库
- 02几何运算、缓冲区与空间叠加分析
- 03坐标参考系统重投影与坐标转换
- 04栅格与矢量数据处理,支持 NDVI 计算
- 05PySAL 空间统计与聚类分析
- 06支持 STDIO 与 HTTP 传输模式
适用场景
- 01为聊天机器人提供地理空间计算能力
- 02对矢量或栅格数据进行批量空间处理
- 03在 Claude Desktop 或 Cursor IDE 中执行 GIS 分析
MCP 相关
该项目是 MCP 服务,向 MCP 客户端暴露 GIS 操作相关工具。可通过 STDIO 或 HTTP 方式运行,并提供文件上传与下载的存储端点。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
GIS MCP 服务
GIS-MCP 是一个开源的模型上下文协议(MCP)服务,可连接 AI 助手和大语言模型(LLM),以执行 GIS 和地理空间操作。
它支持 AI Agent 通过兼容 MCP 的客户端执行地理空间分析、空间数据处理、矢量和栅格操作、坐标转换、空间统计、制图及其他 GIS 工作流。
🌐 官方文档: https://gis-mcp.com
📦 PyPI: https://pypi.org/project/gis-mcp/
💻 源代码: https://github.com/mahdin75/gis-mcp
92+ 个 GIS 工具,涵盖 Shapely、GeoPandas、PyProj、Rasterio、PySAL、可视化、卫星影像、气候、生态、移动、土地覆盖数据等领域。
✨ 想在聊天机器人中进行精准的地理空间分析吗?✨
安装 GIS-MCP,拓展 AI 的空间能力!
当前版本为 0.15.0(Beta):
欢迎贡献代码,也欢迎开发者加入我们,共同构建此项目。
🎥 演示
📋 目录
🚀 功能
GIS MCP Server 为 AI 助手赋予先进的地理空间智能。主要功能包括:
- 🔹 全面的几何运算 – 轻松执行相交、合并、缓冲、差异等几何变换。
- 🔹 高级坐标变换 – 在不同坐标参考系之间轻松重投影和转换几何图形。
- 🔹 精准测量 – 精确计算距离、面积、长度和质心。
- 🔹 空间分析与验证 – 验证几何图形、执行邻近度检查,以及进行空间叠加或连接。
- 🔹 栅格与矢量支持 – 处理栅格图层、计算 NDVI 等指数、裁剪、重采样,并与矢量数据合并。
- 🔹 空间统计与建模 – 利用 PySAL 进行空间自相关、聚类和邻域分析。
- 🔹 轻松集成 – 与 Claude Desktop 或 Cursor IDE 等兼容 MCP 的客户端无缝连接。
- 🔹 HTTP/SSE 传输 – 作为 HTTP 服务运行,并提供用于文件上传和下载操作的 RESTful 存储端点。
- 🔹 灵活存储 – 默认使用本地文件系统,也可按需将文件存储在 Google Cloud Storage 的 GCS 存储桶中。
- 🔹 灵活且可扩展 – 支持基于 Python 的 GIS 库,并可扩展自定义工具或工作流。
🌟 提示: 借助 GIS MCP Server,你的 AI 现在可以“进行空间思考”,为环境分析、制图和位置智能解锁全新能力。
💾 存储
GIS MCP Server 支持两种存储后端,用于文件上传、下载和工具输出:
| 后端 | 适用场景 | 配置方式 |
|---|---|---|
| 本地文件系统 | 默认;文件存储在磁盘上(包括 Docker 卷) | --storage-path 或 GIS_MCP_STORAGE_PATH |
| Google Cloud Storage (GCP) | 希望将文件存储在 GCS 存储桶中时 | --storage-config / GIS_MCP_STORAGE_CONFIG 或 GIS_MCP_STORAGE_PROVIDER=gcp |
使用以下命令安装 GCP 支持:
pip install gis-mcp[gcp]
完整设置说明(路径、IAM、Docker、凭据):存储配置。
📋 前置条件
- Python 3.10 或更高版本
- 兼容 MCP 的客户端(例如 Claude Desktop 或 Cursor)
- 用于安装软件包的互联网连接
Vibe Coding
如果你正在通过 Vibe Coding 构建 Agent,请向模型提供以下 GIS MCP 生成的地图:
llms.txt:为较小上下文窗口整理的摘要。llms-full.txt:为较大上下文窗口提供的完整文档地图。
仓库根目录中也有这些文件的副本(llms.txt、llms-full.txt)。它们会在 MkDocs 构建期间根据文档重新生成。
🛠 安装
选择最适合你需求的安装方式:
🐳 Docker 安装
GIS MCP Server 可通过 Docker 运行,它提供了隔离环境,并预先安装了所有依赖项。
重要提示: Dockerfile 和 Dockerfile.local 默认都已启用 HTTP 传输模式。服务器运行在端口 9010 上,可通过 http://localhost:9010/mcp 访问。
使用 Dockerfile
主 Dockerfile 从 PyPI 安装软件包:
- 构建 Docker 镜像:
docker build -t gis-mcp .
- 运行容器(默认启用 HTTP 模式):
docker run -p 9010:9010 gis-mcp
使用 Dockerfile.local
Dockerfile.local 从本地源文件安装软件包(适用于开发或自定义构建):
- 构建 Docker 镜像:
docker build -f Dockerfile.local -t gis-mcp:local .
- 运行容器(默认启用 HTTP 模式):
docker run -p 9010:9010 gis-mcp:local
服务器将在 HTTP 传输模式下通过 http://localhost:9010/mcp 提供服务。
有关 Docker 配置和环境变量的更多详情,请参阅 Docker 安装指南。
📦 pip 安装
建议大多数用户使用 pip 安装:
- 安装 uv 包管理器:
pip install uv
- 创建虚拟环境(Python 3.10+):
uv venv --python=3.10
- 激活虚拟环境:
Windows(PowerShell):
.\.venv\Scripts\Activate.ps1
Linux:
source .venv/bin/activate
- 安装软件包:
uv pip install gis-mcp
安装可视化功能
若要安装可视化功能(用于交互式地图的 Folium 和 PyDeck):
uv pip install gis-mcp[visualize]
此操作将安装以下额外依赖项:
folium>=0.15.0- 用于创建交互式 Web 地图pydeck>=0.9.0- 用于高级 3D 可视化
- 启动服务器:
gis-mcp
默认情况下,服务器以 STDIO 传输模式运行,该模式非常适合本地开发,以及与 Claude Desktop 或 Cursor IDE 集成。
你也可以在网络部署中以 HTTP 传输模式运行服务器:
export GIS_MCP_TRANSPORT=http
export GIS_MCP_PORT=8080
gis-mcp
在 HTTP 或 SSE 传输模式下运行时,可使用以下端点:
- MCP 端点:
http://host:port/mcp(HTTP)或http://host:port/sse(SSE) - 存储端点:
POST /storage/upload- 将文件上传到服务器存储GET /storage/download?path=<file>- 从服务器存储下载文件GET /storage/list?path=<dir>- 列出服务器存储中的文件
有关传输模式和完整端点文档的更多详情,请参阅:
pip 配置
要将 pip 安装版用于 Claude 或 Cursor,请添加以下配置:
Claude Desktop:
Windows:
{
"mcpServers": {
"gis-mcp": {
"command": "C:\\Users\\YourUsername\\.venv\\Scripts\\gis-mcp",
"args": []
}
}
}
Linux/Mac:
{
"mcpServers": {
"gis-mcp": {
"command": "/home/YourUsername/.venv/bin/gis-mcp",
"args": []
}
}
}
Cursor IDE(创建 .cursor/mcp.json):
Windows:
{
"mcpServers": {
"gis-mcp": {
"command": "C:\\Users\\YourUsername\\.venv\\Scripts\\gis-mcp",
"args": []
}
}
}
Linux/Mac:
{
"mcpServers": {
"gis-mcp": {
"command": "/home/YourUsername/.venv/bin/gis-mcp",
"args": []
}
}
}
配置完成后:
- 请务必将
YourUsername替换为你的实际用户名 - 对于开发安装,请将
/path/to/gis-mcp替换为项目的实际路径 - 重启 IDE 以应用更改
- 现在,你可以通过 Claude 或 Cursor 使用所有 GIS 操作!
🛠 开发安装
适用于贡献者和开发者:
- 安装 uv 包管理器:
pip install uv
- 创建虚拟环境:
uv venv --python=3.10
- 以开发模式安装软件包:
uv pip install -e .
- 启动服务:
python -m gis_mcp
开发配置
要将开发安装版用于 Claude 或 Cursor,请添加以下配置:
Claude Desktop:
Windows:
{
"mcpServers": {
"gis-mcp": {
"command": "C:\\path\\to\\gis-mcp\\.venv\\Scripts\\python",
"args": ["-m", "gis_mcp"]
}
}
}
Linux/Mac:
{
"mcpServers": {
"gis-mcp": {
"command": "/path/to/gis-mcp/.venv/bin/python",
"args": ["-m", "gis_mcp"]
}
}
}
Cursor IDE(创建 .cursor/mcp.json):
Windows:
{
"mcpServers": {
"gis-mcp": {
"command": "C:\\path\\to\\gis-mcp\\.venv\\Scripts\\python",
"args": ["-m", "gis_mcp"]
}
}
}
Linux/Mac:
{
"mcpServers": {
"gis-mcp": {
"command": "/path/to/gis-mcp/.venv/bin/python",
"args": ["-m", "gis_mcp"]
}
}
}
配置完成后:
- 请务必将
YourUsername替换为你的实际用户名 - 对于开发安装,请将
/path/to/gis-mcp替换为项目的实际路径 - 重启 IDE 以应用更改
- 现在,你可以通过 Claude 或 Cursor 使用所有 GIS 操作!
🤖 构建你的第一个 GIS AI Agent
创建能够调用真实 GIS MCP 工具(而非虚构的空间数学运算)的 Agent。
LangChain(Python)——公园缓冲区邻近分析
LangGraph(Python)——有状态的场地覆盖分析
教程:有状态的场地覆盖工作流
- 显式图:解读 → 规划 → 执行 GIS MCP 工具 → 验证 → 响应
- 无需大模型即可验证:
python agents/LangGraph/verify_graph.py
LangGraph(Python)——多 Agent 退距分析
- 规划、分析和验证 Agent;只有分析 Agent 会调用 GIS MCP
- 验证:
python agents/LangGraph/verify_multi_agent.py
更多 Agent 文档
极简入门模板:templates/(langchain-gis-agent、langgraph-gis-workflow、langgraph-multi-agent-gis)
📚 可用函数
本节按库分类,全面列出所有可用函数。
🔷 Shapely 函数(共 29 个)
基本几何运算:
buffer- 创建几何对象的缓冲区intersection- 查找两个几何对象的交集union- 合并两个几何对象difference- 查找几何对象之间的差集symmetric_difference- 查找对称差集
几何属性:
convex_hull- 计算凸包envelope- 获取包围盒minimum_rotated_rectangle- 获取最小旋转矩形get_centroid- 获取质心点get_bounds- 获取几何对象的边界get_coordinates- 提取坐标数组get_geometry_type- 获取几何对象类型名称
变换:
rotate_geometry- 按角度旋转几何对象scale_geometry- 按比例缩放几何对象translate_geometry- 按偏移量移动几何对象
高级运算:
triangulate_geometry- 创建三角剖分voronoi- 创建 Voronoi 图unary_union_geometries- 合并多个几何对象
测量:
get_length- 计算几何对象的长度get_area- 计算几何对象的面积
验证与实用工具:
is_valid- 检查几何对象是否有效make_valid- 修复无效的几何对象simplify- 简化几何对象snap_geometry- 吸附到参考几何对象nearest_point_on_geometry- 查找最近点normalize_geometry- 规范化方向geometry_to_geojson- 转换为 GeoJSONgeojson_to_geometry- 从 GeoJSON 转换
🔷 PyProj 函数(共 13 个)
坐标变换:
transform_coordinates- 转换点坐标project_geometry- 在 CRS 之间投影几何对象
CRS 信息:
get_crs_info- 获取详细的 CRS 信息get_available_crs- 列出可用的 CRS 系统get_utm_zone- 获取坐标对应的 UTM 分区get_utm_crs- 获取坐标对应的 UTM CRSget_geocentric_crs- 获取地心 CRS
大地测量计算:
get_geod_info- 获取椭球体信息calculate_geodetic_distance- 计算椭球体上的距离calculate_geodetic_point- 计算指定距离和方位角处的点calculate_geodetic_area- 计算椭球体上的面积
🔷 GeoPandas 函数(共 13 个)
I/O 操作:
read_file_gpd- 读取地理空间文件并提供预览write_file_gpd- 将 GeoDataFrame 导出到文件
连接与合并操作:
append_gpd- 纵向拼接 GeoDataFramemerge_gpd- 数据库风格的属性连接overlay_gpd- 空间叠加操作dissolve_gpd- 按属性融合explode_gpd- 拆分多部件几何对象
空间操作:
clip_vector- 裁剪几何对象sjoin_gpd- 空间连接sjoin_nearest_gpd- 最近邻空间连接point_in_polygon- 点在多边形内测试
🔷 Rasterio 函数(共 20 个)
基本栅格操作:
metadata_raster- 获取栅格元数据get_raster_crs- 获取栅格 CRSextract_band- 提取单个波段raster_band_statistics- 计算波段统计数据raster_histogram- 计算像元直方图
栅格处理:
clip_raster_with_shapefile- 使用多边形裁剪栅格resample_raster- 按比例因子重采样reproject_raster- 投影到新的 CRStile_raster- 拆分为图块
栅格分析:
compute_ndvi- 计算植被指数raster_algebra- 对波段执行数学运算concat_bands- 合并单波段栅格weighted_band_sum- 加权合并波段
高级分析:
zonal_statistics- 计算多边形内的统计数据reclassify_raster- 重新分类像元值focal_statistics- 移动窗口统计hillshade- 根据 DEM 生成山体阴影write_raster- 将数组写入栅格文件
🔷 PySAL 函数(共 18 个)
空间自相关:
morans_i- 全局 Moran's I 统计量gearys_c- 全局 Geary's C 统计量gamma_statistic- Gamma 指数getis_ord_g- 全局 Getis-Ord G 统计量
局部统计量:
moran_local- 局部 Moran's Igetis_ord_g_local- 局部 Getis-Ord G*join_counts_local- 局部连接计数
全局统计量:
join_counts- 二元连接计数检验adbscan- 自适应密度聚类
空间权重:
weights_from_shapefile- 根据 shapefile 创建权重distance_band_weights- 基于距离的权重knn_weights- K 近邻权重build_transform_and_save_weights- 构建、转换并保存权重ols_with_spatial_diagnostics_safe- 带空间诊断的 OLS 回归build_and_transform_weights- 构建并转换权重
时空分析:
spatial_markov- 面板数据的空间 Markov 分析dynamic_lisa- 动态 LISA(方向性 LISA)分析
空间回归:
gm_lag- GM_Lag 空间 2SLS/GMM-IV 空间滞后模型
🔷 可视化函数(共 2 个)
静态地图可视化(Matplotlib/GeoPandas):
create_map– 从多种地理空间数据源生成高质量静态地图(PNG、PDF、JPG),包括 shapefile、栅格、WKT 几何和坐标数组。支持多个图层及各自的样式选项、图例、标题和网格叠加。
交互式网页地图可视化(Folium):
create_web_map– 使用 Folium 生成交互式 HTML 地图,包含图层控件、图例、比例尺、动态标题、工具提示和缩略地图。支持多种底图选项,并针对网页浏览器采用响应式设计。
🔷 行政区划边界函数(共 1 个)
边界下载:
download_boundaries- 下载 GADM 行政区划边界并保存为 GeoJSON
🔷 气候数据函数(共 1 个)
气候数据下载:
download_climate_data- 下载气候数据(ERA5 或其他 CDS 数据集)
🔷 生态数据函数(共 2 个)
生态数据下载与信息查询:
get_species_info– 获取指定物种名称的分类学信息download_species_occurrences– 下载指定物种的出现记录并保存为 JSON
🔷 移动数据函数(共 2 个)
移动数据下载与路径规划(通过 OSMnx):
download_street_network– 下载指定地点的街道网络并保存为 GraphMLcalculate_shortest_path– 使用已保存的街道网络计算两点之间的最短路径
🔷 土地覆盖数据函数(共 2 个)
来自 Planetary Computer 的土地覆盖数据:
download_worldcover– 下载指定 AOI/年份的 ESA WorldCover;可选裁剪和重投影compute_s2_ndvi– 根据 Sentinel-2 L2A 计算 NDVI;支持裁剪和重投影
🔷 卫星影像函数(共 1 个)
基于 STAC 的卫星影像下载:
download_satellite_imagery– 从 STAC 项目下载并堆叠波段(例如 Sentinel-2、Landsat),可选裁剪和重投影
可用函数总数:92
🛠 客户端开发
工具使用示例:
缓冲区操作
Tool: buffer
Parameters: {
"geometry": "POINT(0 0)",
"distance": 10,
"resolution": 16,
"join_style": 1,
"mitre_limit": 5.0,
"single_sided": false
}
坐标转换
Tool: transform_coordinates
Parameters: {
"coordinates": [0, 0],
"source_crs": "EPSG:4326",
"target_crs": "EPSG:3857"
}
大地测量距离
Tool: calculate_geodetic_distance
Parameters: {
"point1": [0, 0],
"point2": [10, 10],
"ellps": "WGS84"
}
创建静态地图
Tool: create_map
Parameters: {
"layers": [
{
"data": "buildings.shp",
"style": {"label": "Buildings", "color": "red", "alpha": 0.7}
},
{
"data": "roads.shp",
"style": {"label": "Roads", "color": "black", "linewidth": 1}
}
],
"filename": "city_analysis",
"filetype": "png",
"title": "City Infrastructure Analysis",
"show_grid": true,
"add_legend": true
}
创建交互式网页地图
Tool: create_web_map
Parameters: {
"layers": [
{
"data": "buildings.shp",
"style": {"label": "Buildings", "color": "red"}
},
{
"data": "parks.geojson",
"style": {"label": "Parks", "color": "green"}
}
],
"filename": "city_interactive.html",
"title": "City Infrastructure Map",
"basemap": "CartoDB positron",
"show_grid": true,
"add_legend": true,
"add_minimap": true
}
🔮 计划中的功能
- 实现高级空间索引
- 实现网络分析功能
- 添加对 3D 几何的支持
- 实施性能优化
- 添加对更多 GIS 库的支持
🤝 贡献
欢迎贡献!以下是参与方式:
- Fork 此仓库
- 创建功能分支(
git checkout -b feature/AmazingFeature) - 提交更改(
git commit -m 'Add some AmazingFeature') - 推送到该分支(
git push origin feature/AmazingFeature) - 创建 Pull Request
请确保 PR 描述清楚说明问题和解决方案。如适用,请注明相关的问题编号。
📄 许可证
本项目采用 MIT License 许可,详情请参阅 LICENSE 文件。
🔗 相关项目
| 项目名称 | 类别 | 描述 |
|---|---|---|
| Model Context Protocol | MCP 相关 | MCP 核心规范 |
| FastMCP | MCP 相关 | 构建 MCP 服务和客户端的快速、Pythonic 方式 |
| Shapely | 地理空间分析 | 用于处理和分析几何对象的 Python 软件包 |
| PyProj | 地理空间分析 | PROJ 库的 Python 接口 |
| GeoPandas | 地理空间分析 | 用于处理地理空间数据的 Python 软件包 |
| Rasterio | 地理空间分析 | 用于读写地理空间栅格数据的 Python 软件包 |
| Fiona | 地理空间分析 | OGR 库的 Python 接口,用于读写矢量地理空间数据格式 |
| PySAL | 地理空间分析 | 用于地理空间数据科学的 Python 空间分析库 |
| Folium | 可视化 | 使用 Leaflet.js 创建交互式 Web 地图的 Python 库 |
| PyDeck | 可视化 | 用于创建高级 3D 可视化和交互式地图的 Python 库 |
| Matplotlib | 可视化 | 用于创建静态地图和可视化效果的 Python 绘图库 |
| cdsapi | 地理空间数据收集 | 用于访问 Copernicus Climate Data Store(CDS)的 Python API |
| pygadm | 地理空间数据收集 | 可在 Python 脚本中轻松访问 GADM 定义的行政边界 |
| pygbif | 地理空间数据收集 | GBIF API(生态学和生物多样性数据)的 Python 客户端 |
| OSMnx | 地理空间数据收集 | 用于从 OpenStreetMap 下载、建模和分析街道网络及城市要素的 Python 软件包 |
| pystac-client | 地理空间数据收集 | STAC 目录的 Python 客户端;用于搜索和访问时空资产 |
| Planetary Computer SDK for Python | 地理空间数据收集 | Microsoft Planetary Computer 的 Python SDK;提供 STAC/COG 的身份验证和辅助工具 |
🔗 相关 MCP 服务
| 服务名称 | 描述 |
|---|---|
| GeoServer MCP | 一种模型上下文协议(MCP)服务实现,可将大模型连接到 GeoServer REST API |
📞 支持
如需支持,请在 GitHub 仓库中提交 issue。
💬 社区
加入我们的 Discord 社区,参与讨论、获取更新和支持:
👥 贡献者
由 contrib.rocks 制作。
🏆 徽章
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。