政府数据访问协议服务器

用于访问加拿大开放政府数据的Python模型上下文协议服务器,提供数据集发现和交通基础设施查询功能。

  • by krunal16-c
  • Python
  • 本地部署
  • 5 星标
  • 更新于
在 GitHub 查看 krunal16-c/gov-ca-mcp

使用说明

加拿大政府开放数据MCP服务器

基于Python的模型上下文协议(MCP)服务器,用于访问加拿大的开放政府数据。该项目包括两个互补的MCP服务器:

  1. GOV-CA数据集MCP -跨所有加拿大政府开放数据的通用数据集发现、搜索和元数据检索
  2. GOV-CA交通MCP -使用加拿大统计局成本数据查询桥梁、隧道、机场、港口和铁路的专业基础设施

特性

数据集发现(gov_mcp)

  • 搜索范围 250000多个数据集 加拿大开放政府
  • 按主题、组织或管辖区浏览(联邦/省/市)
  • 获取详细的数据集模式并下载URL
  • 跟踪最近的数据集更新

交通基础设施(gov_ca_Transportation)

  • 查询 桥梁条件 使用加拿大统计局所有省份的国家数据
  • 获取 基础设施重置成本 来自加拿大统计局的调查
  • 搜索 机场和港口 在加拿大各地
  • 查询 铁路 基础设施
  • 搜索 隧道 按省份和类型
  • 统一数据方法:使用加拿大统计局核心公共基础设施调查,以实现一致的全国覆盖

快速开始

安装

# Clone and install
cd gov_mcp
pip install -e .

# Or install dependencies directly
pip install -r requirements.txt

运行服务器

# Dataset Discovery MCP
python -m gov_mcp.server

# Transportation Infrastructure MCP  
python -m gov_ca_transportation.server

Docker部署

这两个MCP服务器都可以单独或使用Docker Compose作为Docker容器运行。

使用Docker Compose(推荐)

# Start all servers
docker-compose up

# Start in background (detached mode)
docker-compose up -d

# Start a specific server
docker-compose up gov-ca-dataset
docker-compose up gov-ca-transportation

# View logs
docker-compose logs -f

# Stop all servers
docker-compose down

构建独立的Docker镜像

# Build Dataset Discovery MCP
docker build -f gov_mcp/Dockerfile -t gov-ca-dataset-mcp .

# Build Transportation Infrastructure MCP
docker build -f gov_ca_transportation/Dockerfile -t gov-ca-transportation-mcp .

运行单个容器

# Run Dataset Discovery MCP (port 8002)
docker run -d --name gov-ca-dataset -p 8002:8002 gov-ca-dataset-mcp

# Run Transportation Infrastructure MCP (port 8001)
docker run -d --name gov-ca-transportation -p 8001:8001 gov-ca-transportation-mcp

Docker端点

服务器 容器端口 主机端口 SSE端点
数据集发现 8002 8002 http://localhost:8002/sse
交通 8001 8001 http://localhost:8001/sse

SSE(服务器发送事件)传输

两个MCP服务器都支持基于HTTP的流媒体的SSE传输。使用以下命令启动任一服务器 --sse 标志和端口参数以启用SSE端点:

# Start Transportation MCP with SSE on port 8001
python -m gov_ca_transportation.server --sse --port 8001

# Start Dataset Discovery MCP with SSE on port 8002
python -m gov_mcp.server --sse --port 8002

当启用SSE时。, http://0.0.0.0:8001/sse).您可以使用web客户端、curl或Python SSE客户端连接到该端点。

连接示例:

  • 卷曲(原始流):
curl -H "Accept: text/event-stream" -N http://localhost:8001/sse
  • JavaScript(事件源):
const es = new EventSource("http://localhost:8001/sse");
es.onmessage = (e) => console.log("SSE message:", e.data);
es.onerror = (err) => console.error("SSE error:", err);
  • Python(httpx-sse):
from httpx_sse import EventSource

with EventSource("http://localhost:8001/sse") as event_source:
  for event in event_source:
    # event is an object with .event, .data, .id
    print(event.data)

笔记:

  • SSE端点通过HTTP为兼容客户端提供MCP事件和结果。
  • 启动时,MCP服务器将打印SSE端点URL和端口 --sse.
  • 基于SSE的传输需要客户端支持服务器发送事件(EventSource),或者使用具有SSE支持的Python/HTTP库,如 httpx-sse.

建筑

gov_mcp/                          # Dataset Discovery MCP
├── server.py                     # MCP server with 7 tools
├── api_client.py                 # Open Government Canada API wrapper
├── http_client.py                # HTTP client with retry logic
└── types.py                      # Type definitions

gov_ca_transportation/            # Transportation Infrastructure MCP
├── server.py                     # MCP server with 7 tools
├── api_client.py                 # Statistics Canada + provincial data fetching
├── http_client.py                # HTTP client
└── types.py                      # Type definitions

数据源

交通MCP使用 加拿大统计局 作为全国覆盖的主要数据来源:

数据类型 主要来源 覆盖范围
桥梁状况 加拿大统计局表34-10-0288-01 所有省份/地区
基础设施成本 加拿大统计局表34-10-0284-01 所有省份/地区
详细的桥梁记录 省级开放数据 安大略省、魁北克省、新斯科舍省
机场 魁北克开放数据,不列颠哥伦比亚省OpenMaps 魁北克,不列颠哥伦比亚
铁路 国家铁路网 国家

可用工具

数据集发现MCP(gov_MCP)-7个工具

工具 说明
search_datasets 搜索所有250000多个加拿大政府数据集
get_dataset_schema 获取包含字段定义和下载URL的完整架构
list_organizations 按部门/组织浏览
browse_by_topic 按主题领域探索数据集
check_available_mcps 检查哪些专用MCP可用
get_activity_stream 查看最近更新的数据集
query_datastore 直接查询数据(回退模式)

交通基础设施MCP(gov_ca_Transportation)-7个工具

工具 说明
query_bridges 使用StatCan状态数据按省份搜索桥梁基础设施
analyze_bridge_conditions 使用加拿大统计局数据进行总体状况分析
get_infrastructure_costs 从加拿大统计局获取按条件计算的重置成本
query_ports_airports 搜索机场、港口、码头、直升机场
query_railways 搜索铁路线路和车站
query_tunnels 搜索隧道基础设施
compare_across_regions 比较各省的基础设施

示例用法

搜索数据集

# Search for water datasets in Saskatchewan
result = search_datasets(query="water Saskatchewan", limit=20)
# Returns 103 datasets including water quality monitoring data

分析桥梁状况

# Get bridge conditions for any province using Statistics Canada data
result = analyze_bridge_conditions(region="Saskatchewan")
# Returns: Very Poor: 2.4%, Poor: 16.4%, Fair: 23.7%, Good: 32.4%, Very Good: 10.1%

获取基础设施成本

# Get bridge replacement costs for Ontario
result = get_infrastructure_costs(infrastructure_type="bridge", location="Ontario")
# Returns: Total $81.4B, Priority investment needed: $2.65B (Poor + Very Poor)

查询网桥

# Get bridge data with StatCan condition distribution
result = query_bridges(province="Ontario", limit=100)
# Returns condition summary + detailed records from provincial sources

项目结构

gov_mcp/
├── gov_mcp/                    # Dataset Discovery MCP
│   ├── __init__.py
│   ├── server.py               # MCP server
│   ├── api_client.py           # API wrapper
│   ├── http_client.py          # HTTP client
│   ├── types.py                # Type definitions
│   └── Dockerfile              # Docker build for this server
├── gov_ca_transportation/      # Transportation MCP
│   ├── __init__.py
│   ├── server.py               # MCP server
│   ├── api_client.py           # StatCan + provincial data fetcher
│   ├── http_client.py          # HTTP client
│   ├── types.py                # Type definitions
│   └── Dockerfile              # Docker build for this server
├── tests/                      # Test files
├── documentation/              # Additional docs
├── docker-compose.yml          # Docker Compose for all servers
├── .dockerignore               # Docker ignore file
├── pyproject.toml              # Project config
├── requirements.txt            # Dependencies
└── README.md                   # This file

配置

VS代码MCP设置

添加到您的VS Code settings.json或MCP配置中:

{
  "mcpServers": {
    "gov-ca-dataset": {
      "command": "python",
      "args": ["-m", "gov_mcp.server"],
      "cwd": "/path/to/gov_mcp"
    },
    "gov-ca-transportation": {
      "command": "python", 
      "args": ["-m", "gov_ca_transportation.server"],
      "cwd": "/path/to/gov_mcp"
    }
  }
}

发展

运行测试

pytest tests/

运行验证

python validate.py

关键能力

  • 250000多个数据集 可从加拿大开放政府搜索
  • 加拿大统计局一体化 获取权威的国家基础设施数据
  • 覆盖所有省份 桥梁状况和基础设施成本
  • 真实的基础设施数据 来自省/市开放数据门户
  • 多种数据格式:GeoJSON、CSV、ZIP(StatCan)
  • 条件分析:桥梁状况百分比,按状况分列的重置成本
  • 地理过滤:按省或全国汇总

API来源

来源 数据类型
加拿大统计局 基础设施成本、桥梁状况(全国)
open.canada.ca 联邦数据集
donnees.montreal.ca 蒙特利尔大桥记录
data.ontario.ca 安大略省桥梁记录
openmaps.gov.bc.ca 不列颠哥伦比亚省机场、铁路
data.novascotia.ca 新斯科舍省构造
donneesquebec.ca 魁北克机场

许可证

MIT许可证-有关详细信息,请参阅许可证文件

贡献

欢迎投稿!拜托:

  1. 复刻仓库
  2. 创建要素分支
  3. 添加新功能的测试
  4. 提交拉取请求