Town of Chapel Hill GIS — Chapel Hill, North Carolina open geospatial data (ArcGIS). Provides access to parcels, zoning, transit & town services datasets via ArcGIS Feature Services.
Three well-named, read-only tools with clear descriptions and complete input schemas. All tools start with action verbs (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. Parameter descriptions lack format constraints (e.g., 'url must be https and end in /FeatureServer/<n>' is stated in code but not in schema descriptions). No error handling guidance in descriptions. Missing required field declarations in search_datasets 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 Town of Chapel Hill GIS open geospatial datasets (parcels, zoning, transit & town 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 invisible in the schema. query_layer and layer_info return raw ArcGIS JSON with no field documentation.
search_datasets schema missing 'required' field declaration. 'query' parameter is mandatory but not marked required in inputSchema. LLMs may omit it, causing invalid API calls.
Parameter descriptions lack actionable format constraints. 'url' descriptions state the rule in prose ('ending in /FeatureServer/<n>') but not as a regex pattern or enum. LLMs cannot reliably parse prose constraints.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 61 | 2026-07-28+ | v2 |
No error handling guidance in tool descriptions. If a query returns 0 results or an invalid layer URL is passed, descriptions do not tell the LLM what to do next (retry, refine query, check URL format).
query_layer 'limit' parameter accepts 1 - 2000 but description does not mention the upper bound. LLMs may request 10,000 records, causing API rejection or timeout.