City of Tucson GIS — Tucson, Arizona open geospatial data (ArcGIS). Provides access to zoning, parcels, public safety, transport & city services datasets via ArcGIS Feature Services.
Three well-named, read-only tools with clear descriptions and complete input schemas. Naming follows verb_noun pattern (search_datasets, query_layer, layer_info). Descriptions are 150 - 250 chars, within the 10 - 1024 baseline. All parameters have type definitions and descriptions. However, output schemas are not documented, LLMs cannot predict response structure for downstream planning. Parameter constraints (e.g., limit 1 - 50, 1 - 2000) are stated in descriptions but not enforced as JSON Schema constraints. No error handling guidance or recovery paths. Missing required/optional field clarity in some schemas.
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 Tucson GIS open geospatial datasets (zoning, parcels, public safety, transport & 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, nested objects) for downstream tool chaining or data extraction.
Parameter constraints (limit ranges, required fields) stated in descriptions but not enforced in JSON Schema. Missing 'required' array in search_datasets; limit/offset lack min/max in schema.
No error handling guidance. Errors like 'ArcGIS Hub: 404' or 'Invalid url' do not tell LLM what to do next (retry, ask user, try alternative). Missing recovery paths.
query_layer accepts free-form SQL 'where' clause without validation. Vulnerable to SQL injection if LLM is tricked into passing malicious payloads. No input sanitization visible.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 58 | 2026-07-28+ | v2 |
Transport mechanism not declared in code. No explicit MCP server initialization, message handlers, or protocol version negotiation visible. Appears to be a tool export only, not a full MCP server.