自然语言能降低城市开放数据的使用门槛,却不能替代 ArcGIS 服务结构。DataDenver MCP 的公开实现把 Denver 的 ArcGIS FeatureServer 查询封装成三个 MCP 工具,并将时间字段从 epoch 毫秒转为 ISO 字符串。适合把它看作查询草案助手:语言接口可以建议参数,但服务路径、图层编号、过滤条件、字段与用途仍须明确确认。

可核查事实

  • 项目将自己描述为 DataDenver MCP,数据来自 Denver 开放数据门户及 ArcGIS REST API。

  • 代码说明 Denver 通过 ArcGIS hosted services 发布数据,而不是 Socrata 或 CKAN;数据集由服务和图层组成,通过 ArcGIS query 端点读取。

  • 适配器的基础服务地址为 services1.arcgis.com/zdB7qR0BtYrg0Xpl/arcgis/rest/services。

  • 公开代码只定义 denver_recent、denver_layers 和 denver_query 三个工具。

  • denver_recent 当前只有 crime,对应 ODC_CRIME_OFFENSES_P/FeatureServer 的324图层,并按 FIRST_OCCURRENCE_DATE DESC 排序。

  • denver_layers 可列出服务的图层 ID 与名称,供后续查询发现。

  • denver_query 要求 service 和 layer,支持 where、out_fields、order_by、limit;默认 where 为1=1,默认字段为全部字段。

  • 最近记录工具将 limit 限制在1至1000;通用查询限制在1至2000,并将 ArcGIS 日期型字段的 epoch 毫秒转换为 ISO 时间。

  • 查询 URL 设置 returnGeometry=false 和 f=json,工具返回属性行而不是几何要素。

核心机制:让语言接口生成查询草案,而不是替代数据目录

DataDenver MCP 的实现将开放数据拆为 ArcGIS 服务路径和非零图层编号。代码特别提示 crime 使用324图层,表明不能假设每个 FeatureServer 都从0号图层开始。助手可以针对用户问题提出候选服务、图层和过滤条件,但该草案需要与门户目录、图层元数据和业务问题逐一核对。

三个工具构成最小链条:denver_layers 先发现图层,denver_query 再以 service 与 layer 执行查询,denver_recent 仅为 crime 提供按 FIRST_OCCURRENCE_DATE DESC 的快捷入口。把发现与查询分开,避免将看似合理的数据集名称直接当作权威图层。项目使用 ArcGIS query,并把日期型字段从 epoch 毫秒转为 ISO;展示层还应保留原字段名、时区解释和转换规则。

GIS 场景:把查询卡片同输出表一起保存

分析师询问某街区近期有哪些案件记录时,助手应先显示 FeatureServer 路径、324图层、where 条件、日期字段、排序、返回字段和行数上限。用户确认后才发出请求,并将查询卡片与返回表一同保存。后续才可判断结果中的近期和案件究竟对应何种筛选条件。

通用查询默认 where=1=1、全部字段,最多允许2000行。这对探索方便,却可能使范围过大、字段暴露过多或结果被截断。生产工作流应要求显式时间范围、最小字段集、分页或总数检查,并将结果标为一次查询快照。由于 URL 固定 returnGeometry=false,本适配器输出的是属性行;若要进行地图叠加、空间选择或距离分析,还必须另外取得并验证几何、坐标参考系与许可。

技术路径

  1. 用图层发现工具取得服务路径、图层编号、图层名称和字段元数据,不靠自然语言猜测。

  2. 将问题转为待确认的查询卡片:where、字段、排序、时间范围、行数上限和预期用途。

  3. 对日期字段保留原始字段名、epoch 到 ISO 的转换记录及时间语义。

  4. 以最小字段和明确过滤执行查询;检查返回数量是否触及1000或2000行上限。

  5. 将结果存为带查询参数、抓取时间和服务版本的只读快照,不能直接覆盖权威城市数据。

  6. 若需要空间分析,另外取得几何、坐标参考系、精度和数据许可,并由 GIS 人员审核。

检查清单

  • 服务路径、图层编号和字段是否来自图层发现,而不是模型猜测?

  • where 条件、时间范围、排序和行数上限是否获得确认?

  • 是否检查了1000或2000行限制导致的截断?

  • ISO 时间转换是否保留了原始 ArcGIS 日期字段和时区解释?

  • returnGeometry=false 的属性结果是否被错误当成可直接制图的空间要素?

风险边界

该仓库版本为0.1.0,公开实现只注册 crime 作为友好数据集,已知服务表也只有 crime。README 提及可连接更大的网关和更多数据源,但这不等于当前 DataDenver 包已经为所有城市图层提供稳定、授权或完整的工具覆盖。任何城市开放数据 MCP 都应以实际工具注册、服务元数据和实时接口返回为准。

此外,代码查询 ArcGIS REST 服务,默认能读取所有字段并返回属性;开放可访问不等于每种用途都合适。涉及个人、执法、位置敏感或高风险决策的数据,需要最小化字段、用途限制、发布审查和地方数据政策。助手只能帮助形成和执行可审计的查询,不能把一次 API 响应提升为执法、公共安全或个案判断。

资料依据

本文依据 DataDenver MCP README 和其 公开 TypeScript 实现 撰写。ArcGIS 服务模式、基础地址、三个工具、crime 服务与324图层、查询参数、行数限制、epoch 转 ISO、无几何输出和版本信息均来自一手仓库;查询卡片、快照和发布审查为 GIS 生产建议。

结论

MCP 可以让城市开放数据更容易被提问,但不能抹去服务与图层结构。先发现图层,再确认查询参数,最后保存可回放的结果快照,才能让自然语言入口服务于可核查的城市 GIS 分析。