MCP (模型上下文协议) 服务器用于马来西亚的开放数据 API,提供对政府数据集和集合的便捷访问。
请注意,这不是由马来西亚政府或马来西亚开放数据/Jabatan Digital Negara/数字部官方提供的 MCP 服务器。
此 MCP 服务器采用混合方法以实现高效数据访问:
这种方法提供了以下好处:
在将此 MCP 服务器与 AI 模型集成时:
search_all 开始https://data.gov.my/... 和 https://open.dosm.gov.my/...parse_parquet_file 直接访问数据或使用 get_parquet_info 获取元数据find_dashboard_for_parquet 提供的仪表板链接参考 PROMPT.md 获取全面的 AI 集成指南。
npm install
要在开发模式下运行 MCP 服务器:
npx @smithery/cli dev
要构建 MCP 服务器以部署:
npx @smithery/cli build
此 MCP 设计为部署到 Smithery。请按照以下步骤进行部署:
确保已安装 Smithery CLI:
npm install -g @smithery/cli
构建项目:
npx @smithery/cli build
部署到 Smithery:
npx @smithery/cli deploy
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 实时数据(Protocol Buffer 格式的车辆位置)get_transit_routes:从 GTFS 数据中提取路线信息get_transit_stops:从 GTFS 数据中提取站点信息,可选地按路线过滤hello:一个简单的测试工具,验证 MCP 服务器是否正常工作MCP 服务器提供了强大的数据目录信息检索处理:
employment_sector 进行特殊处理,该数据集包含从 2001 年到 2022 年的年度数据const result = await tools.get_weather_forecast({
location: "吉隆坡",
days: 3
});
const result = await tools.search_datasets({
query: "人口",
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"
});
请注意底层 API 的速率限制。过多的请求可能会被节流。
src/index.ts:主要的 MCP 服务器实现和工具注册src/datacatalogue.tools.ts:数据目录 API 工具src/dashboards.tools.ts:仪表板访问和搜索工具src/dosm.tools.ts:马来西亚统计局工具src/unified-search.tools.ts:增强的统一搜索,支持分词和同义词扩展src/parquet.tools.ts:Parquet 文件解析和元数据工具src/weather.tools.ts:天气预报和警告工具src/transport.tools.ts:交通和 GTFS 数据工具src/gtfs.tools.ts:GTFS 解析和分析工具src/flood.tools.ts:洪水预警和监控工具Dockerfile:Smithery 的 Docker 配置smithery.yaml:Smithery 配置package.json:项目依赖和脚本tsconfig.json:TypeScript 配置在部署到 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
如果遇到部署问题:
Dockerfile 和 smithery.yaml 是否位于存储库根目录index.js 文件是否导出有效的 MCP 服务器函数此项目支持以下配置选项:
地理编码凭证(可选。仅适用于 GTFS 交通功能使用):
以下凭证仅在计划使用需要地理编码服务的 GTFS 交通工具时才需要。其他功能如数据目录访问、天气预报和 DOSM 数据不需要这些凭证。
如果未提供 Google 地图或 GrabMaps API 密钥,GTFS 交通工具将自动回退到使用 Nominatim(OpenStreetMap)API 进行地理编码,该 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 地图 API 密钥grabMapsApiKey - GrabMaps API 密钥awsAccessKeyId - GrabMaps 的 AWS 访问密钥awsSecretAccessKey - GrabMaps 的 AWS 秘密密钥awsRegion - GrabMaps 的 AWS 区域(例如 ap-southeast-5 用于马来西亚区域或 ap-southeast-1 用于新加坡区域)API 密钥将在连接过程中安全传递给服务器。
注意:对于马来西亚位置,GrabMaps 提供最准确的地理编码结果,其次是 Google 地图,两者都需要 API 密钥。如果您不提供任一 API 密钥,系统将自动使用 Nominatim API,该 API 是免费的但可能对马来西亚某些位置的结果不太准确。
重要:这些地理编码凭证仅适用于以下 GTFS 交通工具:
get_transit_routes - 当将地点名称转换为坐标时get_transit_stops - 当将地点名称转换为坐标时parse_gtfs_static - 当需要对站点位置进行地理编码时关于 GTFS 实时工具的注意事项:parse_gtfs_realtime 工具目前处于开发阶段,可用性有限。通过此 MCP 访问实时数据是实验性的,可能并非所有提供商或路线都可用。对于最新列车和公交车时刻表、公交车位置和实时到达情况,请使用官方交通应用如 Google 地图、MyRapid PULSE、Moovit 或 Lugo。
所有其他工具如数据目录访问、仪表板搜索、天气预报和 DOSM 数据都不需要任何地理编码凭证。
MIT - 详情见 LICENSE 文件。