City of Puyallup GIS — Puyallup, Washington open geospatial data (ArcGIS). Provides access to parcels, zoning, public works & city services datasets via 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 - 180 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 for downstream chaining. No error handling guidance (e.g., 'If query fails, try layer_info first'). Parameter constraints (e.g., limit 1 - 50) are stated in descriptions but not enforced as JSON Schema min/max. No tool annotations (readOnlyHint, idempotentHint) despite all three being read-only and idempotent.
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 Puyallup 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) for downstream tool chaining or data extraction.
No error handling guidance. Errors like 'ArcGIS Hub: 404' or 'Invalid url' do not tell the LLM what to do next (retry, try a different tool, ask user).
Numeric constraints (limit 1 - 50, offset, resultRecordCount 1 - 2000) stated in descriptions but not enforced in JSON Schema (missing minimum/maximum). LLMs may pass invalid values.
No tool annotations. All three tools are read-only and idempotent, should declare readOnlyHint and idempotentHint to guide agent retry logic and permission checks.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 62 | 2026-07-28+ | v2 |
query_layer accepts free-form SQL 'where' clause without validation. Vulnerable to SQL injection if user input is passed directly. Should validate or parameterize.