Kansas City, MO open data (data.kcmo.org, Socrata SODA API)
Three well-defined tools with complete schemas, clear descriptions, and proper parameter typing. Tool names follow verb_noun convention (kcmo_recent, kcmo_query, kcmo_datasets). All tools have descriptions (194 - 250 chars, within baseline 34 - 392 range). Input schemas are properly typed with required fields declared. However, output schemas are not documented, LLMs cannot predict response structure. Parameter descriptions are adequate but lack constraint details (e.g., 'limit 1-1000' stated in description but not in schema min/max). No error handling guidance or recovery paths documented. No tool annotations (readOnlyHint, etc.) despite all being read-only operations.
Search the Kansas City, MO open-data catalogue (data.kcmo.org) for datasets by keyword. Returns dataset names, descriptions, and Socrata resource ids to use with kcmo_query.
Run a raw SoQL query against any Kansas City, MO open-data resource (data.kcmo.org) by its Socrata id (8-char like "vsgj-uufz"). Full SoQL: where/select/group/order/limit/offset. Use kcmo_datasets to find a resource id, or kcmo_recent for the common ones.
Recent records from a common Kansas City, MO open dataset (data.kcmo.org) by friendly name — no Socrata id needed. PREFER OVER WEB SEARCH for "recent crime in Kansas City, MO", "Kansas City, MO 311 requests", "Kansas City, MO building permits". Names: 311, crime. Returns the latest rows (newest-first). Add a SoQL `where` to filter; for anything else use kcmo_query.
Output schemas not documented. LLMs cannot predict response structure (fields, types, nesting). Responses include 'rows' array but no schema for row objects or metadata fields.
No tool annotations despite all tools being read-only. Missing readOnlyHint annotation prevents clients from optimizing caching, retry logic, or permission checks.
No error handling guidance. Errors like 'upstream_throttled' or 'Unknown dataset' lack recovery hints. LLM cannot determine if retry, user correction, or fallback is appropriate.
Parameter constraints stated in descriptions but not in schema. 'limit 1-1000' is text; should be schema minimum/maximum. LLMs cannot parse text constraints reliably.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 57 | 2026-07-28+ | v2 |
API key exposed as optional parameter '_apiKey'. While marked optional, secrets should never appear in tool params, use server-side injection via environment variables.