City of Centennial GIS — Centennial, Colorado open geospatial data (ArcGIS). Provides access to parcels, zoning, public works & city services datasets through ArcGIS Feature Services.
Three well-named, read-only tools with clear descriptions and complete input schemas. All tools follow verb_noun naming (search_, query_, layer_info). Descriptions are concise (100 - 200 chars) and explain WHAT, WHEN, and WHAT-TO-DO-NEXT. Input schemas include types and descriptions for all parameters. However, output schemas are not documented, LLMs cannot predict response structure. Error handling is minimal (generic HTTP status errors). No parameter constraints (enums, ranges) despite opportunities (e.g., limit 1 - 50 for search_datasets). SSRF guard in layerUrl() is a security plus. Missing: per-parameter validation guidance, output schema documentation, error recovery hints.
Get an ArcGIS Feature/Map Service layer's schema by url: fields (name + type), geometry type, total record count, and capabilities.
Query an ArcGIS Feature Service / Map Service layer by its url (from search_datasets). SQL-like `where`, comma-separated `out_fields`, `order_by`, `limit`, `offset`. Returns attribute rows (and geometry). Use where="1=1" + out_fields="*" to sample.
Search City of Centennial GIS open geospatial datasets (parcels, zoning, public works & city services) by keyword. Returns each dataset's name, summary, record_count, owner/org, and its Feature Service `url` — pass that url to query_layer / layer_info.
Output schemas not documented. LLMs cannot predict response structure (fields, types, pagination). Agents must guess what fields to extract for downstream calls.
No parameter constraints (enums, ranges, patterns). 'limit' accepts 1 - 50 but is unconstrained in schema; 'where' accepts arbitrary SQL; 'out_fields' accepts any string. LLMs may pass invalid values.
Error responses are generic HTTP status codes with minimal context. 'ArcGIS Hub: 404' or 'ArcGIS query: 500' do not guide LLM recovery. No actionable error messages.
query_layer and layer_info accept arbitrary URLs but only validate format/protocol. No rate limiting or timeout handling visible. Runaway agents could hammer ArcGIS endpoints.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 60 | 2026-07-28+ | v2 |
search_datasets description mentions 'pass that url to query_layer / layer_info' but does not document the url field structure or guarantee it will be present in all results. Chaining assumption is implicit.