加拿大政府开放数据MCP服务器
基于Python的模型上下文协议(MCP)服务器,用于访问加拿大的开放政府数据。该项目包括两个互补的MCP服务器:
- GOV-CA数据集MCP -跨所有加拿大政府开放数据的通用数据集发现、搜索和元数据检索
- 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.serverDocker部署
这两个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-mcpDocker端点
| 服务器 | 容器端口 | 主机端口 | 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许可证-有关详细信息,请参阅许可证文件
贡献
欢迎投稿!拜托:
- 复刻仓库
- 创建要素分支
- 添加新功能的测试
- 提交拉取请求
