MCP server providing access to Malaysia's open data platform (data.gov.my), including datasets, dashboards, DOSM statistics, flood warnings, and GTFS transport data
Server provides 18 well-organized tools with consistent naming patterns and mostly complete schemas. Tool names follow verb_noun convention (list_, get_, search_, read_). All tools have descriptions, though some are generic or contain unhelpful warnings. Input schemas are present for all tools with proper type definitions and reasonable constraints (limit 1-100, offset >= 0). However, output schemas are completely undocumented, no indication of what fields are returned from any tool. Parameter descriptions vary in quality: some are excellent (detailed, context-rich), others are minimal. Error handling is absent from the codebase, no visible validation, error messages, or recovery guidance. No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite all tools being READ_ONLY. The server demonstrates awareness of tool composition (search_all as a unified alternative to separate search tools) but fails to execute defensively on output documentation and error paths.
Filter datasets by various criteria such as frequency, geography, etc.
Get chart configurations for a specific dashboard
Get comprehensive metadata for a dashboard by name
Gets data from a specific DOSM dataset
Gets current flood warnings for Malaysia
Gets GTFS realtime vehicle position data for a specific transport provider
Gets GTFS schedule and route information for a specific transport provider and optional location
Gets GTFS static data for a specific transport provider
No output schemas documented for any tool. LLMs cannot predict what fields will be returned, forcing guesswork about downstream chaining and data extraction. Violates pattern:tool-schema requirement.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 56 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 13 | - | v1 |
Gets GTFS realtime vehicle positions for a specific transport provider and location
Gets GTFS data for a specific transport agency
Lists all available dashboards from the Malaysia Open Data platform
Lists all datasets from the comprehensive catalogue with rich metadata
Lists available datasets from the Department of Statistics Malaysia
Lists available transport agencies with GTFS data
Reads and analyzes Parquet files from URLs, with intelligent data type detection and column classification
Searches across all available data sources including datasets, dashboards, and DOSM statistics with a single query
⚠️ CONSIDER USING search_all INSTEAD: This only searches dashboards. For comprehensive results across datasets and dashboards, use search_all tool. ⚠️
⚠️ CONSIDER USING search_all INSTEAD: This only searches datasets. For comprehensive results across datasets and dashboards, use search_all tool. ⚠️
Search tools (datagovmy_search_dashboards, datagovmy_search_datasets_catalogue) contain warning text '⚠️ CONSIDER USING search_all INSTEAD' directly in descriptions. This is anti-pattern, descriptions should explain WHAT the tool does, not redirect to alternatives. Use search_all as the canonical tool and deprecate/hide the others, or keep them for backward compatibility without description warnings.
All tools declared as READ_ONLY but no tool annotations (readOnlyHint, destructiveHint, idempotentHint) present in schema. MCP spec allows and encourages these hints for agent planning. Current protocol readiness score penalized for omission.
No error handling or validation visible in source code. No try-catch blocks with actionable error messages, no input validation against schema constraints, no recovery guidance. If an API call fails, LLM receives no guidance on whether to retry, escalate, or try an alternative tool.
Parameter descriptions vary significantly in quality. Some tools (e.g., datagovmy_read_parquet) have excellent detail. Others (e.g., datagovmy_get_flood_warnings severity parameter) lack concrete enum values or examples of valid inputs. No tool documents what an 'optional' parameter defaults to, does omitting 'limit' mean unlimited, 20, 100, or return-everything?
No documented return type or response structure. Tools that return paginated results (list_*, search_*) do not document whether they return a count, next_cursor, or total count. Agents cannot know if they need to call again or what fields to expect.
Some parameter descriptions contain example values (e.g., '(e.g., "cpi_core", "cpi_strata")' for dataset_id, '(e.g., 3.1390 for KL)' for latitude). LLMs frequently reuse example values literally rather than adapting to the actual context. Use enum constraints or formal patterns instead.