City of Tampa GIS — Tampa, Florida 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 substantive (150 - 250 chars) and explain purpose, prerequisites, and output. Input schemas include types and descriptions for all parameters. However, output schemas are not documented, LLMs cannot predict response structure. Parameter descriptions lack explicit constraints (e.g., 'limit: 1-50' is stated but not formalized). No error handling guidance or recovery paths. Missing required/optional field clarity in some schemas. No tool annotations (readOnlyHint present implicitly via Risk field, but not in schema).
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 Tampa 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). search_datasets returns {total, count, datasets[]} but this is inferred from code, not declared in tool definition.
Parameter constraints not formalized in schema. 'limit: 1-50' and 'limit: 1-2000' are stated in descriptions but not in JSON Schema (no minimum/maximum fields). LLMs may pass invalid values.
No error handling guidance. Tools throw generic errors ('ArcGIS Hub: 404', 'Invalid input') without recovery hints. LLMs cannot determine if errors are retryable or require user intervention.
query_layer 'where' parameter accepts arbitrary SQL. No validation or injection guards documented. LLMs could pass malicious SQL if prompted by adversarial input.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 58 | 2026-07-28+ | v2 |
Missing required field declarations. search_datasets 'query' is required but not marked in inputSchema.required. query_layer 'url' is marked required (correct), but layer_info 'url' is not explicitly marked.