一个 GIS MCP server 同时能下载边界、裁剪影像、运行空间统计、生成地图并保存文件时,它已经不是单纯的问答插件,而是数据获取、计算与文件交付的控制面。gisMcp 的官方 README 提供了一个可核验的开源案例:它经一个 FastMCP instance 暴露 98 个空间工具,可经 stdio、HTTP 或 SSE 传输调用,并带有本地或 Google Cloud Storage 的可插拔存储。对组织来说,第一件事不是让模型看见所有工具,而是把传输入口、可下载的数据、写入目录、返回文件和高影响操作划成明确边界。

数据口径与可核验事实

gisMcp README 将项目描述为上游开源 GIS MCP server 的重构、自托管 fork。它称一个 FastMCP instance 通过默认 stdio、HTTP 或 SSE 暴露 98 个 geospatial tools;LLM agent 可用 plain JSON tool calls 缓冲 geometry、重投影坐标、裁剪 raster、运行空间统计、下载真实数据并渲染地图。

代码按四个包组织。ops 是分析核心,README 列出 86 个工具,包装 Shapely、PyProj、GeoPandas、Rasterio 与 PySAL;data 提供 GADM、ERA5、GBIF、OSM、ESA WorldCover 和 Sentinel-2 等下载;maps 生成 Matplotlib 静态地图和 Folium 交互地图;store 提供本地磁盘与 Google Cloud Storage 的存储抽象和 storage HTTP endpoints。

README 的启动示例使用 gismcp 运行 stdio;设 GIS_MCP_TRANSPORT=http 时 MCP endpoint 是 /mcp、存储端点位于 /storage/...,设为 sse 时 MCP endpoint 是 /sse。配置中,本地根目录可由 --storage-path 或 GIS_MCP_STORAGE_PATH 指定,默认是 ~/.gis_mcp/data;GCS provider 通过环境变量指定 bucket、prefix、credentials 与 project。

文档给出三条组合工作流:边界下载、buffer、overlay 和地图;卫星影像下载、按 shapefile clip、NDVI 和地图;以及 spatial weights、Moran’s I、带空间诊断的 OLS。create_web_map 会在 storage root 下写 HTML,并由 GET /storage/download?path=outputs/map.html 提供下载。README 还称测试通过 FastMCP test client 驱动共享 gis_mcp instance,测试目录有 104 个测试。

研究的八项固定口径

  1. gisMcp 是上游 GIS MCP server 的重构、自托管 fork。

  2. 一个 FastMCP instance 经 stdio、HTTP 或 SSE 暴露 98 个空间工具。

  3. ops 有 86 个分析工具,包装 Shapely、PyProj、GeoPandas、Rasterio 与 PySAL。

  4. data 包可下载 GADM、ERA5、GBIF、OSM、ESA WorldCover 与 Sentinel-2。

  5. maps 生成 Matplotlib 静态地图与 Folium 交互地图。

  6. store 支持本地磁盘和 Google Cloud Storage,并提供 storage HTTP endpoints。

  7. HTTP transport 的 MCP endpoint 是 /mcp,SSE transport 的 endpoint 是 /sse。

  8. create_web_map 在 storage root 写 HTML,可由 /storage/download 下载。

核心机制:工具权限、数据权限和文件权限必须分开

MCP client 能调用一个工具,不代表它应自动拥有该工具所接触的数据和文件权限。以 download_satellite_imagery 为例,工具访问的是外部数据源;以 clip_raster_with_shapefile 为例,它读取输入并产生中间文件;以 create_web_map 为例,它又把结果写进可下载路径。三个动作应分别有来源许可、AOI/体量限制、输出目录和下载授权,而不能只靠一个“允许调用 MCP”的总开关。

传输选择同样改变威胁面。stdio 适合单机、受控的本地 client;HTTP/SSE 让其他进程或网络 client 访问,因此需要认证、网络隔离、请求限额、审计和明确的允许工具集。README 所列 /storage/... 与 /storage/download 更要求将下载路径限制在工作根目录内,拒绝路径穿越,并将不可公开的中间文件与可交付成果分开。

GIS 场景

若团队要做“某区绿地与热岛风险的初筛”,可以只开放一组只读工具:按允许的行政区下载边界、读取预批准气候格网、计算受限统计和导出审阅地图。Agent 的每次调用都记录输入 AOI、数据来源、版本、下载时间、参数、输出相对路径和调用人。它可以提出候选结论,但不得代替权威监测、规划审批或健康风险认定。

影像链路尤其需要预算与范围控制。Sentinel-2 下载、栅格裁剪和 NDVI 可能在大 AOI 或反复重试时产生明显成本与存储量。把下载工具设为只接受面积上限、日期窗口和预定义 collection,把结果写入 run-specific 子目录,并设置过期清理规则,才可让自然语言入口保持可预测。

技术路径

第一,先以 stdio 在隔离机器运行,注册一个只读工具 allowlist,而不是一次启用 98 个工具。第二,按 ops、data、maps、store 建四类权限:分析参数、外部下载、地图渲染和文件读写分别授权。第三,固定 GIS_MCP_STORAGE_PATH 到专用根目录,输出只能使用运行 ID 下的相对路径。第四,若启用 HTTP/SSE,增加认证、反向代理范围限制、每 client 的速率与 AOI/行数/文件大小配额。第五,用 FastMCP client 回归 buffer、overlay、栅格 clip 和地图下载,检查调用日志、输出路径、异常响应与目录隔离。

在交付层,将地图 HTML 与其他中间栅格、矢量、凭据或调试日志放到不同目录。/storage/download 只允许白名单的成品相对路径,并在返回前核查 MIME type、大小和生成任务归属。

风险与局限

README 的 98 工具与 104 测试是项目作者的说明,不等于所有工具在组织网络、云凭据、数据许可或生产负载下都安全。不同下载器的数据许可、更新节奏、覆盖范围与使用条款并不相同;模型也可能选择了逻辑正确却业务不合适的工具或参数。

HTTP/SSE 暴露的 server 和 storage download 接口若无认证、目录隔离或请求审计,可能把数据下载和文件读取能力扩展到不应访问的 client。即便保存的是公开数据,组合 AOI、时间、资产或内部图层仍可能形成敏感信息,应按业务场景控制留存和分享。

检查清单

  1. 是否从 stdio 和最小 allowlist 起步,而非默认开放全部 98 个工具?

  2. 是否将数据下载、空间分析、渲染与文件下载拆成独立授权?

  3. 是否为外部数据设 AOI、日期、行数、文件大小与调用频率上限?

  4. HTTP/SSE 是否有认证、网络隔离、审计与 client 限流?

  5. GIS_MCP_STORAGE_PATH 是否为专用根目录,并禁止路径穿越?

  6. /storage/download 是否只提供有归属的成品相对路径?

  7. 是否为每次 Agent 调用保存来源、版本、参数、输出与人工复核结论?

结论

gisMcp 证明 FastMCP 可以把分析、数据和地图交付组合成统一工具面;也正因如此,GIS Agent 的安全边界必须落在传输、下载、存储和结果发布四处。先让一小组只读工具在固定根目录中可审计地运行,再逐步开放影像处理和 Web 地图交付,才能把“工具很多”变成受控的空间工作流。

资料来源