Connects Claude to Malaysia's government open data ecosystem through a unified MCP interface. You get search and metadata tools for datasets and dashboards, live parquet file parsing in three modes (raw, summary, latest period), GTFS static and realtime transit data with Nominatim geocoding, plus weather forecasts, earthquake warnings, and flood alerts from the Malaysian Meteorological Department. The hosted endpoint works credential free, or you can self host with optional Firebase analytics persistence. Reach for this when you need programmatic access to DOSM statistics, public transit schedules, environmental warnings, or any of the 200+ datasets in the data.gov.my catalogue without manually wrangling APIs.
Public tool metadata for what this MCP can expose to an agent.
datagovmy_list_datasets_catalogueLists all datasets from the comprehensive catalogue with rich metadata2 paramsLists all datasets from the comprehensive catalogue with rich metadata
limitnumberoffsetnumberdatagovmy_search_datasets_catalogue⚠️ CONSIDER USING search_all INSTEAD: This only searches datasets. For comprehensive results across datasets and dashboards, use search_all tool. ⚠️2 params⚠️ CONSIDER USING search_all INSTEAD: This only searches datasets. For comprehensive results across datasets and dashboards, use search_all tool. ⚠️
limitnumberquerystringdatagovmy_filter_datasets_catalogueFilter datasets by various criteria such as frequency, geography, etc.7 paramsFilter datasets by various criteria such as frequency, geography, etc.
limitnumberoffsetnumberfrequencystringgeographyarrayyearRangearraydataSourcearraydemographyarraydatagovmy_get_dataset_filtersGet available filter options for datasetsGet available filter options for datasets
No parameter schema in public metadata yet.
datagovmy_get_dataset_detailsGet comprehensive metadata for a dataset by ID1 paramsGet comprehensive metadata for a dataset by ID
idstringdatagovmy_list_dosm_datasetsLists available datasets from the Department of Statistics Malaysia3 paramsLists available datasets from the Department of Statistics Malaysia
limitnumberoffsetnumberdataset_idstringdatagovmy_get_dosm_datasetGets data from a specific DOSM dataset3 paramsGets data from a specific DOSM dataset
idstringlimitnumberoffsetnumberdatagovmy_get_weather_forecastGets weather forecast for Malaysia2 paramsGets weather forecast for Malaysia
daysnumberlocationstringdatagovmy_get_weather_warningsGets current weather warnings for Malaysia2 paramsGets current weather warnings for Malaysia
typestringlocationstringdatagovmy_get_earthquake_warningsGets earthquake warnings for Malaysia2 paramsGets earthquake warnings for Malaysia
daysnumbermagnitudenumberdatagovmy_list_dashboardsLists all available dashboards from the Malaysia Open Data platform2 paramsLists all available dashboards from the Malaysia Open Data platform
limitnumberoffsetnumberdatagovmy_search_dashboards⚠️ CONSIDER USING search_all INSTEAD: This only searches dashboards. For comprehensive results across datasets and dashboards, use search_all tool. ⚠️2 params⚠️ CONSIDER USING search_all INSTEAD: This only searches dashboards. For comprehensive results across datasets and dashboards, use search_all tool. ⚠️
limitnumberquerystringdatagovmy_get_dashboard_detailsGet comprehensive metadata for a dashboard by name1 paramsGet comprehensive metadata for a dashboard by name
namestringdatagovmy_get_dashboard_chartsGet chart configurations for a specific dashboard1 paramsGet chart configurations for a specific dashboard
namestringdatagovmy_search_all⭐⭐⭐ PRIMARY SEARCH TOOL: Always use this first for any data or visualization queries. Searches across both datasets and dashboards with intelligent fallback. ⭐⭐⭐3 params⭐⭐⭐ PRIMARY SEARCH TOOL: Always use this first for any data or visualization queries. Searches across both datasets and dashboards with intelligent fallback. ⭐⭐⭐
limitnumberquerystringprioritizestringdataset · dashboarddatagovmy_parse_parquet_fileParse and display data from a Parquet file URL2 paramsParse and display data from a Parquet file URL
urlstringmaxRowsnumberdatagovmy_get_parquet_infoGet metadata and structure information about a Parquet file1 paramsGet metadata and structure information about a Parquet file
urlstringdatagovmy_find_dashboard_for_parquetFind the corresponding dashboard for a Parquet file1 paramsFind the corresponding dashboard for a Parquet file
urlstringdatagovmy_parse_gtfs_staticParse GTFS Static data for a specific transport provider. IMPORTANT: For transit queries like "Show me routes from Rapid Penang", use get_transit_routes directly with the provider name. This is a low-level tool - prefer using get_transit_routes or get_transit_stops for most us...3 paramsParse GTFS Static data for a specific transport provider. IMPORTANT: For transit queries like "Show me routes from Rapid Penang", use get_transit_routes directly with the provider name. This is a low-level tool - prefer using get_transit_routes or get_transit_stops for most us...
categorystringproviderstringforce_refreshbooleandatagovmy_parse_gtfs_realtimeParse GTFS Realtime data for a specific transport provider. IMPORTANT: For transit queries like "Show me bus locations from Rapid Penang", use this tool directly with the provider name. Common names like "rapid penang", "rapid kuantan", or "mybas johor" are automatically mappe...3 paramsParse GTFS Realtime data for a specific transport provider. IMPORTANT: For transit queries like "Show me bus locations from Rapid Penang", use this tool directly with the provider name. Common names like "rapid penang", "rapid kuantan", or "mybas johor" are automatically mappe...
categorystringproviderstringforce_refreshbooleandatagovmy_get_transit_routesGet transit routes from GTFS data. IMPORTANT: For transit route queries like "Show me bus routes for Rapid Penang", use this tool directly with the provider name.3 paramsGet transit routes from GTFS data. IMPORTANT: For transit route queries like "Show me bus routes for Rapid Penang", use this tool directly with the provider name.
categorystringproviderstringroute_idstringdatagovmy_get_transit_stopsGet transit stops from GTFS data. IMPORTANT: For transit stop queries like "Show me bus stops for Rapid Penang", use this tool directly with the provider name. The tool supports common names like "rapid penang", "rapid kuantan", "ktmb", or "mybas johor" which will be automatic...4 paramsGet transit stops from GTFS data. IMPORTANT: For transit stop queries like "Show me bus stops for Rapid Penang", use this tool directly with the provider name. The tool supports common names like "rapid penang", "rapid kuantan", "ktmb", or "mybas johor" which will be automatic...
stop_idstringcategorystringproviderstringroute_idstringdatagovmy_get_transit_arrivalsGet real-time transit arrivals at a specific stop. IMPORTANT: Use this tool directly for queries like "When will the next bus arrive at my stop?" or "Show me arrival times for Rapid Penang buses at stop X".5 paramsGet real-time transit arrivals at a specific stop. IMPORTANT: Use this tool directly for queries like "When will the next bus arrive at my stop?" or "Show me arrival times for Rapid Penang buses at stop X".
limitnumberstop_idstringcategorystringproviderstringroute_idstringdatagovmy_search_transit_stops_by_locationSearch for transit stops near a named location. IMPORTANT: Use this tool for queries like "Show me bus stops near KLCC" or "What buses stop at KL Sentral?" This tool geocodes the location name to coordinates, then finds nearby stops. CRITICAL: For Rapid KL services, ALWAYS use...8 paramsSearch for transit stops near a named location. IMPORTANT: Use this tool for queries like "Show me bus stops near KLCC" or "What buses stop at KL Sentral?" This tool geocodes the location name to coordinates, then finds nearby stops. CRITICAL: For Rapid KL services, ALWAYS use...
limitnumbercountrystringcategorystringlocationstringproviderstringmax_distancenumberarrivals_limitnumberinclude_arrivalsbooleandatagovmy_find_nearest_transit_stopsFind the nearest transit stops to a given location. IMPORTANT: Use this tool directly for queries like "Where is the nearest bus stop to my location?" or "How do I get to the nearest Rapid Penang bus stop?"6 paramsFind the nearest transit stops to a given location. IMPORTANT: Use this tool directly for queries like "Where is the nearest bus stop to my location?" or "How do I get to the nearest Rapid Penang bus stop?"
limitnumbercategorystringlatitudenumberproviderstringlongitudenumbermax_distancenumberdatagovmy_list_transport_agenciesLists available transport agencies with GTFS data2 paramsLists available transport agencies with GTFS data
limitnumberoffsetnumberdatagovmy_get_transport_dataGets GTFS data for a specific transport agency3 paramsGets GTFS data for a specific transport agency
limitnumberoffsetnumberdataset_idstringdatagovmy_get_gtfs_staticGets GTFS static data for a specific transport provider4 paramsGets GTFS static data for a specific transport provider
limitnumberoffsetnumbercategorystringproviderstringdatagovmy_get_gtfs_realtime_vehicle_positionGets GTFS realtime vehicle position data for a specific transport provider4 paramsGets GTFS realtime vehicle position data for a specific transport provider
limitnumberoffsetnumbercategorystringproviderstringdatagovmy_get_flood_warningsGets current flood warnings for Malaysia3 paramsGets current flood warnings for Malaysia
statestringdistrictstringseveritystringdatagovmy_helloA simple test tool to verify that the MCP server is working correctlyA simple test tool to verify that the MCP server is working correctly
No parameter schema in public metadata yet.
MCP Endpoint: https://mcp.techmavie.digital/datagovmy/mcp
Analytics Dashboard: https://mcp.techmavie.digital/datagovmy/analytics/dashboard
MCP (Model Context Protocol) server for Malaysia's open data APIs, with tools for datasets, dashboards, DOSM, weather, floods, parquet files, and GTFS transit data.
This is not an official MCP server from the Government of Malaysia, Jabatan Digital Negara, or the Ministry of Digital.
data-gov-my/datagovmy-metaGTFS location search now uses Nominatim (OpenStreetMap) only.
NOMINATIM_CONTACT_EMAILUse the hosted endpoint directly:
https://mcp.techmavie.digital/datagovmy/mcp
Example MCP client config:
{
"mcpServers": {
"malaysia-opendata": {
"transport": "streamable-http",
"url": "https://mcp.techmavie.digital/datagovmy/mcp"
}
}
}
No API keys or geocoding credentials are needed.
Detailed VPS instructions live in deploy/DEPLOYMENT.md.
npm install
npm run build
npm run start:http
search_alllist_datasets_cataloguesearch_datasets_cataloguefilter_datasets_catalogueget_dataset_filtersget_dataset_detailslist_dashboardssearch_dashboardsget_dashboard_detailsget_dashboard_chartslist_dosm_datasetsget_dosm_datasetparse_parquet_fileget_parquet_infofind_dashboard_for_parquetget_weather_forecastget_weather_warningsget_earthquake_warningsget_flood_warningslist_transport_agenciesget_transport_dataget_gtfs_staticget_gtfs_realtime_vehicle_positionparse_gtfs_staticparse_gtfs_realtimeget_transit_routesget_transit_stopsget_transit_arrivalssearch_transit_stops_by_locationfind_nearest_transit_stopshelloMore detail and usage guidance lives in TOOLS.md and PROMPT.md.
# Install dependencies
npm install
# Run the HTTP server in development mode
npm run dev:http
# Build and run the production server locally
npm run build
npm run start:http
# Verify the server
curl http://localhost:8080/health
curl -X POST http://localhost:8080/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
The hosted server exposes:
/analytics for JSON stats/analytics/tools for tool usage stats/analytics/dashboard for the HTML dashboard| Variable | Default | Description |
|---|---|---|
PORT | 8080 | HTTP server port |
HOST | 0.0.0.0 | Bind address |
API_BASE_URL | https://api.data.gov.my | Malaysia Open Data API base URL |
CACHE_TTL | 3600000 | Metadata cache TTL in ms |
AXIOS_TIMEOUT | 30000 | HTTP timeout in ms |
GITHUB_FETCH_BATCH_SIZE | 20 | Concurrent GitHub metadata fetches |
GH_PAT | empty | Optional GitHub token for higher GitHub API rate limits |
ANALYTICS_RESET_KEY | empty | Secret key for analytics reset/import endpoints |
ANALYTICS_DIR | /app/data | Analytics storage directory |
FIREBASE_DATABASE_URL | empty | Firebase Realtime Database URL for analytics persistence |
FIREBASE_CREDENTIALS_PATH | .credentials/firebase-service-account.json | Firebase service account path |
NOMINATIM_CONTACT_EMAIL | empty | Optional contact email appended to Nominatim queries for self-hosted deployments |
Example .env:
GH_PAT=your_github_pat_here
NOMINATIM_CONTACT_EMAIL=your-email@example.com
ANALYTICS_RESET_KEY=your_analytics_reset_key_here
ANALYTICS_DIR=/app/data
FIREBASE_DATABASE_URL=your_firebase_database_url_here
FIREBASE_CREDENTIALS_PATH=.credentials/firebase-service-account.json
The server now depends on public Nominatim for GTFS location-name searches. The code includes:
User-Agentemail support via NOMINATIM_CONTACT_EMAILIf you expect sustained geocoding traffic, consider self-hosting a compatible geocoder or routing through your own approved service.
src/
index.ts
http-server.ts
config.ts
datacatalogue.tools.ts
dashboards.tools.ts
dosm.tools.ts
flood.tools.ts
gtfs.tools.ts
parquet.tools.ts
transport.tools.ts
unified-search.tools.ts
weather.tools.ts
firebase-analytics.ts
utils/
deploy/
DEPLOYMENT.md
nginx-mcp.conf
# Docker logs
docker compose logs -f
# Local health check
curl http://localhost:8080/health
# Hosted MCP tool list
curl -X POST https://mcp.techmavie.digital/datagovmy/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'
MIT. See LICENSE.
com.mcparmory/google-sheets
domdomegg/google-sheets-mcp
henilcalagiya/google-sheets-mcp
cct15/war-dashboard-data
moooonad/mcp-google-sheets-full
io.github.br0ski777/csv-to-json