MCP server providing tools to search, browse, and access datasets from the Ontario Data Catalogue using the CKAN API
Ontario Data MCP provides 10 well-named, read-only tools with consistent parameter schemas and descriptions. All tools follow verb_noun naming (search_, get_, list_) and include pagination (limit/offset). Descriptions are present but generic (avg ~60 chars, below the 194-char baseline for A+ tools). Parameter descriptions are minimal and lack actionable constraints (e.g., no enum for 'sort' parameter, no format guidance for 'query'). Output schemas are not documented, LLMs cannot predict response structure for chaining. Error handling is absent; the client returns raw API errors without recovery guidance. No tool annotations (readOnlyHint, idempotentHint) despite all tools being read-only and idempotent. Security is adequate (no secrets in params, read-only operations), but composition could be tighter, search_datasets and search_by_tag overlap in intent.
Get detailed information about a specific dataset.
Get resources associated with a dataset.
Get data from a specific resource (if available via datastore).
List datasets with optional filtering.
List all dataset groups/categories.
List all organizations publishing datasets.
List all available tags in the catalogue.
Output schemas not documented. LLMs cannot predict response structure (fields, types, nested objects) for downstream chaining or data extraction. Baseline: 100% of A+ tools document return types.
Parameter descriptions are minimal (avg ~20 chars) and lack actionable constraints. 'sort' parameter accepts free-form strings with no enum; 'query' lacks format guidance; 'filters' (object type) has no schema. Baseline: 100% of A+ tools have param descriptions ≥50 chars with constraints.
No error handling or recovery guidance. Client returns raw API errors (e.g., 'RequestException') without actionable next steps. LLMs cannot self-correct or retry intelligently.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 51 | 2026-07-28+ | v2 |
Search datasets by tag.
Search datasets by keywords.
Search within a datastore resource.
No tool annotations despite all tools being read-only and idempotent. Missing readOnlyHint and idempotentHint annotations prevent agents from optimizing retry logic and caching strategies.
Overlapping tool intent: search_datasets and search_by_tag both search for datasets; list_datasets also searches. Composition should consolidate into one canonical search tool with optional tag filter to reduce LLM decision overhead.