Mcp Datagovmy

Mcp Datagovmy

🚀 马来西亚开放数据MCP

马来西亚开放数据MCP(Model Context Protocol)服务器,为马来西亚开放数据API提供服务,可便捷访问政府数据集和集合。

请注意,这并非由马来西亚政府或马来西亚开放数据、数字部、数字事务部团队的任何人运营的官方MCP服务器。

🚀 快速开始

安装

npm install

开发模式运行

npx @smithery/cli dev

构建部署版本

npx @smithery/cli build

部署

此MCP设计为部署到Smithery,按以下步骤操作:

  1. 确保已安装Smithery CLI:
    npm install -g @smithery/cli
    
  2. 构建项目:
    npx @smithery/cli build
    
  3. 部署到Smithery:
    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

✨ 主要特性

  • 增强的统一搜索:具备灵活的分词和同义词扩展功能
    • 智能查询处理,可进行术语规范化
    • 支持复数形式和常见前缀(如 “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

  1. 安装Smithery CLI:
npm install -g @smithery/cli
  1. 构建项目:
npx @smithery/cli build
  1. 部署:
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数据

// 解析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进行地理编码,该服务免费且无需凭证。

可以通过以下两种方式设置这些配置选项:

  1. 通过Smithery的配置界面:在连接到MCP服务器时设置。
  2. 作为环境变量:在本地开发时设置(GOOGLE_MAPS_API_KEY、GRAB_MAPS_API_KEY)。

设置环境变量

本地开发

项目在开发期间使用 dotenv.env 文件加载环境变量。

  1. 在项目根目录创建一个 .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 # 新加坡地区
  1. 使用 npm run dev 本地运行服务器时,变量将自动加载。

Smithery部署

通过Smithery连接到MCP服务器时:

  1. 点击 “Connect Malaysia Open Data MCP Server”。
  2. 会看到以下配置选项:
    • googleMapsApiKey - Google Maps API密钥
    • grabMapsApiKey - GrabMaps API密钥
    • awsAccessKeyId - 用于GrabMaps的AWS访问密钥
    • awsSecretAccessKey - 用于GrabMaps的AWS秘密密钥
    • awsRegion - 用于GrabMaps的AWS区域(例如,马来西亚地区为 'ap-southeast-5',新加坡地区为 'ap-southeast-1')
  3. 在这些字段中输入API密钥和AWS凭证。
  4. 点击 “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数据,不需要任何地理编码凭证。

🛠️ 故障排除

部署问题

如果遇到部署问题:

  1. 确保GitHub仓库是公开的,或者已正确连接到Smithery。
  2. 验证 Dockerfilesmithery.yaml 是否位于仓库根目录。
  3. 检查 index.js 文件是否导出有效的MCP服务器函数。

🙏 致谢

  • 0 关注
  • 0 收藏,17 浏览
  • system 提出于 2025-09-21 15:21

相似服务问题

相关AI产品