马来西亚开放数据MCP(Model Context Protocol)服务器,为马来西亚开放数据API提供服务,可便捷访问政府数据集和集合。
请注意,这并非由马来西亚政府或马来西亚开放数据、数字部、数字事务部团队的任何人运营的官方MCP服务器。
npm install
npx @smithery/cli dev
npx @smithery/cli build
此MCP设计为部署到Smithery,按以下步骤操作:
npm install -g @smithery/cli
npx @smithery/cli build
npx @smithery/cli deploy
在部署到Smithery之前进行本地测试:
# 启动开发服务器
npm run dev
# 或者构建并运行生产版本
npm run build
npm start
# 在另一个终端中,测试hello工具
curl -X POST http://localhost:8182/invoke/hello -H "Content-Type: application/json" -d "{}"
也可以使用Smithery CLI进行本地开发:
# 以开发模式运行
npx @smithery/cli dev
# 为生产环境构建
npx @smithery/cli build
此MCP服务器采用混合方法实现高效数据访问:
这种方法带来以下好处:
npm install
npx @smithery/cli dev
npx @smithery/cli build
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:在数据目录中搜索数据集list_dosm_datasets:列出DOSM的可用数据集get_dosm_dataset:获取特定DOSM数据集的数据parse_parquet_file:解析并显示Parquet文件URL中的数据get_parquet_info:获取Parquet文件的元数据和结构信息find_dashboard_for_parquet:查找Parquet文件对应的仪表板URLget_weather_forecast:获取马来西亚的天气预报get_weather_warnings:获取马来西亚当前的天气预警get_earthquake_warnings:获取马来西亚的地震预警list_transport_agencies:列出提供GTFS数据的可用交通机构get_transport_data:获取特定交通机构的GTFS数据parse_gtfs_static:解析特定交通提供商的GTFS静态数据(包含CSV数据的ZIP文件)parse_gtfs_realtime:解析车辆位置的GTFS实时数据(协议缓冲区格式)get_transit_routes:从GTFS数据中提取路线信息get_transit_stops:从GTFS数据中提取站点信息,可根据路线进行过滤hello:一个简单的测试工具,用于验证MCP服务器是否正常工作本项目支持以下配置选项:
地理编码凭证(可选,仅在使用GTFS公交功能时需要):
以下凭证仅在计划使用需要地理编码服务的GTFS公交工具时需要。其他功能,如数据目录访问、天气预报和DOSM数据,不需要这些凭证。
如果未提供Google Maps或GrabMaps API密钥,GTFS公交工具将自动回退到使用Nominatim(OpenStreetMap)API进行地理编码,该服务免费且无需凭证。
可以通过以下两种方式设置这些配置选项:
本地开发:
项目在开发期间使用 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服务器时:
googleMapsApiKey - Google Maps API密钥grabMapsApiKey - GrabMaps API密钥awsAccessKeyId - 用于GrabMaps的AWS访问密钥awsSecretAccessKey - 用于GrabMaps的AWS秘密密钥awsRegion - 用于GrabMaps的AWS区域(例如,马来西亚地区为 'ap-southeast-5',新加坡地区为 'ap-southeast-1')连接期间,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数据,不需要任何地理编码凭证。
如果遇到部署问题:
Dockerfile 和 smithery.yaml 是否位于仓库根目录。index.js 文件是否导出有效的MCP服务器函数。