🚀 馬來西亞開放數據MCP
馬來西亞開放數據MCP(Model Context Protocol)服務器,為馬來西亞開放數據API提供服務,可便捷訪問政府數據集和集合。
請注意,這並非由馬來西亞政府或馬來西亞開放數據、數字部、數字事務部團隊的任何人運營的官方MCP服務器。
🚀 快速開始
安裝
npm install
開發模式運行
npx @smithery/cli dev
構建部署版本
npx @smithery/cli build
部署
此MCP設計為部署到Smithery,按以下步驟操作:
- 確保已安裝Smithery CLI:
npm install -g @smithery/cli
- 構建項目:
npx @smithery/cli build
- 部署到Smithery:
npx @smithery/cli deploy
本地測試
在部署到Smithery之前進行本地測試:
npm run dev
npm run build
npm start
curl -X POST http://localhost:8182/invoke/hello -H "Content-Type: application/json" -d "{}"
也可以使用Smithery CLI進行本地開發:
npx @smithery/cli dev
npx @smithery/cli build
✨ 主要特性
- 增強的統一搜索:具備靈活的分詞和同義詞擴展功能
- 智能查詢處理,可進行術語規範化
- 支持複數形式和常見前綴(如 “epayment” 中的 “e”)
- 針對不同數據類型進行智能優先級排序
- 純JavaScript支持Parquet文件
- 可在瀏覽器或Node.js中直接解析Parquet文件
- 支持BROTLI壓縮
- 解析失敗時可回退到元數據估算
- 自動映射儀表板URL以進行可視化
- 混合數據訪問架構
- 預先生成靜態索引,實現高效搜索
- 動態API調用,獲取詳細元數據
- 多提供商地理編碼
- 支持Google Maps、GrabMaps和Nominatim(OpenStreetMap)
- 根據位置和可用API密鑰智能選擇服務
- 針對馬來西亞境內位置優化GrabMaps
- 提供商之間自動回退
- 全面的數據源
- 包含豐富元數據的馬來西亞數據目錄
- 用於數據可視化的交互式儀表板
- 馬來西亞統計局(DOSM)數據
- 天氣預報和預警
- 公共交通和GTFS數據
- 多提供商馬來西亞地理編碼
- 針對馬來西亞地址和位置進行優化
- 三層地理編碼系統:GrabMaps、Google Maps和Nominatim
- 優先使用GrabMaps以更好地覆蓋馬來西亞地區
- 未提供API密鑰時自動回退到Nominatim
🔧 技術細節
此MCP服務器採用混合方法實現高效數據訪問:
- 預先生成靜態索引:用於列出和搜索數據集及儀表板
- 動態API調用:僅在請求特定數據集或儀表板詳細信息時使用
這種方法帶來以下好處:
- 更快的搜索和列表操作
- 減少對外部服務的API調用
- 一致的數據訪問模式
- 需要時獲取最新的詳細信息
📚 詳細文檔
- TOOLS.md - 可用工具的詳細信息和最佳實踐
- PROMPT.md - AI集成指南和使用模式
📦 安裝指南
依賴安裝
npm install
開發環境
npx @smithery/cli dev
生產環境構建
npx @smithery/cli build
部署到Smithery
- 安裝Smithery CLI:
npm install -g @smithery/cli
- 構建項目:
npx @smithery/cli build
- 部署:
npx @smithery/cli deploy
💻 使用示例
基礎用法
獲取天氣預報
const result = await tools.get_weather_forecast({
location: "Kuala Lumpur",
days: 3
});
搜索數據集
const result = await tools.search_datasets({
query: "population",
limit: 5
});
高級用法
解析GTFS數據
const staticData = await tools.parse_gtfs_static({
provider: "ktmb"
});
const realtimeData = await tools.parse_gtfs_realtime({
provider: "prasarana",
category: "rapid-rail-kl"
});
const routes = await tools.get_transit_routes({
provider: "mybas-johor"
});
const stops = await tools.get_transit_stops({
provider: "prasarana",
category: "rapid-rail-kl",
route_id: "LRT-KJ"
});
📄 許可證
本項目採用MIT許可證,詳情請參閱 LICENSE 文件。
🔧 可用工具
數據目錄
list_datasets:列出數據目錄中的可用數據集
get_dataset:獲取數據目錄中特定數據集的數據
search_datasets:在數據目錄中搜索數據集
馬來西亞統計局(DOSM)
list_dosm_datasets:列出DOSM的可用數據集
get_dosm_dataset:獲取特定DOSM數據集的數據
Parquet文件處理
parse_parquet_file:解析並顯示Parquet文件URL中的數據
get_parquet_info:獲取Parquet文件的元數據和結構信息
find_dashboard_for_parquet:查找Parquet文件對應的儀表板URL
天氣
get_weather_forecast:獲取馬來西亞的天氣預報
get_weather_warnings:獲取馬來西亞當前的天氣預警
get_earthquake_warnings:獲取馬來西亞的地震預警
交通
list_transport_agencies:列出提供GTFS數據的可用交通機構
get_transport_data:獲取特定交通機構的GTFS數據
GTFS解析
parse_gtfs_static:解析特定交通提供商的GTFS靜態數據(包含CSV數據的ZIP文件)
parse_gtfs_realtime:解析車輛位置的GTFS即時數據(協議緩衝區格式)
get_transit_routes:從GTFS數據中提取路線信息
get_transit_stops:從GTFS數據中提取站點信息,可根據路線進行過濾
測試
hello:一個簡單的測試工具,用於驗證MCP服務器是否正常工作
⚙️ 配置
環境變量
本項目支持以下配置選項:
地理編碼憑證(可選,僅在使用GTFS公交功能時需要):
以下憑證僅在計劃使用需要地理編碼服務的GTFS公交工具時需要。其他功能,如數據目錄訪問、天氣預報和DOSM數據,不需要這些憑證。
- googleMapsApiKey:可選。如果提供,系統將使用Google Maps API將位置名稱轉換為座標。
- grabMapsApiKey:可選。使用GrabMaps地理編碼服務需要此憑證,該服務針對馬來西亞境內位置進行了優化。
- awsAccessKeyId:使用GrabMaps集成時必需。用於GrabMaps API認證的AWS訪問密鑰。
- awsSecretAccessKey:使用GrabMaps集成時必需。用於GrabMaps API認證的AWS秘密密鑰。
- awsRegion:使用GrabMaps集成時必需。GrabMaps API的AWS區域(例如,馬來西亞地區為 'ap-southeast-5',新加坡地區為 'ap-southeast-1')。
如果未提供Google Maps或GrabMaps API密鑰,GTFS公交工具將自動回退到使用Nominatim(OpenStreetMap)API進行地理編碼,該服務免費且無需憑證。
可以通過以下兩種方式設置這些配置選項:
- 通過Smithery的配置界面:在連接到MCP服務器時設置。
- 作為環境變量:在本地開發時設置(GOOGLE_MAPS_API_KEY、GRAB_MAPS_API_KEY)。
設置環境變量
本地開發:
項目在開發期間使用 dotenv 從 .env 文件加載環境變量。
- 在項目根目錄創建一個
.env 文件,內容如下:
GOOGLE_MAPS_API_KEY=your_google_api_key_here
GRAB_MAPS_API_KEY=your_grab_api_key_here
AWS_ACCESS_KEY_ID=your_aws_access_key_for_grabmaps
AWS_SECRET_ACCESS_KEY=your_aws_secret_key_for_grabmaps
AWS_REGION=ap-southeast-5 # 馬來西亞地區或 ap-southeast-1 # 新加坡地區
- 使用
npm run dev 本地運行服務器時,變量將自動加載。
Smithery部署:
通過Smithery連接到MCP服務器時:
- 點擊 “Connect Malaysia Open Data MCP Server”。
- 會看到以下配置選項:
googleMapsApiKey - Google Maps API密鑰
grabMapsApiKey - GrabMaps API密鑰
awsAccessKeyId - 用於GrabMaps的AWS訪問密鑰
awsSecretAccessKey - 用於GrabMaps的AWS秘密密鑰
awsRegion - 用於GrabMaps的AWS區域(例如,馬來西亞地區為 'ap-southeast-5',新加坡地區為 'ap-southeast-1')
- 在這些字段中輸入API密鑰和AWS憑證。
- 點擊 “Get Link” 生成連接URL。
連接期間,API密鑰將安全地傳遞給服務器。
注意:對於馬來西亞境內位置,GrabMaps提供最準確的地理編碼結果,其次是Google Maps,兩者都需要API密鑰。如果未提供任何API密鑰,系統將自動使用Nominatim API,該服務免費,但對於馬來西亞某些位置的結果可能不太準確。
重要:這些地理編碼憑證僅適用於以下GTFS公交工具:
get_transit_routes - 在將位置名稱轉換為座標時使用。
get_transit_stops - 在將位置名稱轉換為座標時使用。
parse_gtfs_static - 在對站點位置進行地理編碼時需要。
關於GTFS即時工具的注意事項:parse_gtfs_realtime 工具目前正在開發中,可用性有限。通過此MCP進行即時數據訪問是實驗性的,可能並非所有提供商或路線都可用。如需最新的火車和公交時刻表、公交位置和即時到站信息,請使用官方公交應用,如Google Maps、MyRapid PULSE、Moovit或Lugo。
所有其他工具,如數據目錄訪問、儀表板搜索、天氣預報和DOSM數據,不需要任何地理編碼憑證。
🛠️ 故障排除
部署問題
如果遇到部署問題:
- 確保GitHub倉庫是公開的,或者已正確連接到Smithery。
- 驗證
Dockerfile 和 smithery.yaml 是否位於倉庫根目錄。
- 檢查
index.js 文件是否導出有效的MCP服務器函數。
🙏 致謝